diff options
Diffstat (limited to 'tk8.6/tests/listbox.test')
-rw-r--r-- | tk8.6/tests/listbox.test | 3218 |
1 files changed, 3218 insertions, 0 deletions
diff --git a/tk8.6/tests/listbox.test b/tk8.6/tests/listbox.test new file mode 100644 index 0000000..68cb5d8 --- /dev/null +++ b/tk8.6/tests/listbox.test @@ -0,0 +1,3218 @@ +# This file is a Tcl script to test out the "listbox" command +# of Tk. It is organized in the standard fashion for Tcl tests. +# +# Copyright (c) 1993-1994 The Regents of the University of California. +# Copyright (c) 1994-1997 Sun Microsystems, Inc. +# Copyright (c) 1998-1999 by Scriptics Corporation. +# All rights reserved. + +package require tcltest 2.2 +eval tcltest::configure $argv +tcltest::loadTestedCommands +namespace import -force tcltest::test + +set fixed {Courier -12} + +proc record {name args} { + global log + lappend log [format {%s %.6g %.6g} $name {*}$args] +} + +proc getsize w { + regexp {(^[^+-]*)} [wm geometry $w] foo x + return $x +} + +proc resetGridInfo {} { + # Some window managers, such as mwm, don't reset gridding information + # unless the window is withdrawn and re-mapped. If this procedure + # isn't invoked, the window manager will stay in gridded mode, which + # can cause all sorts of problems. The "wm positionfrom" command is + # needed so that the window manager doesn't ask the user to + # manually position the window when it is re-mapped. + + wm withdraw . + wm positionfrom . user + wm deiconify . +} + +# Procedure that creates a second listbox for checking things related +# to partially visible lines. + +proc mkPartial {{w .partial}} { + destroy $w + toplevel $w + wm geometry $w +0+0 + listbox $w.l -width 30 -height 5 + pack $w.l -expand 1 -fill both + $w.l insert end one two three four five six seven eight nine ten \ + eleven twelve thirteen fourteen fifteen + update + scan [wm geometry $w] "%dx%d" width height + wm geometry $w ${width}x[expr $height-3] + update +} + +# Create entries in the option database to be sure that geometry options +# like border width have predictable values. + +option add *Listbox.borderWidth 2 +option add *Listbox.selectBorderWidth 1 +option add *Listbox.highlightThickness 2 +option add *Listbox.font {Helvetica -12 bold} + +# Listbox used in 3.* configuration options tests +listbox .l +pack .l +update +resetGridInfo +test listbox-1.1 {configuration options} -body { + .l configure -activestyle under + list [lindex [.l configure -activestyle] 4] [.l cget -activestyle] +} -cleanup { + .l configure -activestyle [lindex [.l configure -activestyle] 3] +} -result {underline underline} +test listbox-1.2 {configuration options} -body { + .l configure -activestyle foo +} -returnCodes error -result {bad activestyle "foo": must be dotbox, none, or underline} +test listbox-1.3 {configuration options} -body { + .l configure -background #ff0000 + list [lindex [.l configure -background] 4] [.l cget -background] +} -cleanup { + .l configure -background [lindex [.l configure -background] 3] +} -result {{#ff0000} #ff0000} +test listbox-1.4 {configuration options} -body { + .l configure -background non-existent +} -returnCodes error -result {unknown color name "non-existent"} +test listbox-1.5 {configuration options} -body { + .l configure -bd 4 + list [lindex [.l configure -bd] 4] [.l cget -bd] +} -cleanup { + .l configure -bd [lindex [.l configure -bd] 3] +} -result {4 4} +test listbox-1.6 {configuration options} -body { + .l configure -bd badValue +} -returnCodes error -result {bad screen distance "badValue"} +test listbox-1.7 {configuration options} -body { + .l configure -bg #ff0000 + list [lindex [.l configure -bg] 4] [.l cget -bg] +} -cleanup { + .l configure -bg [lindex [.l configure -bg] 3] +} -result {{#ff0000} #ff0000} +test listbox-1.8 {configuration options} -body { + .l configure -bg non-existent +} -returnCodes error -result {unknown color name "non-existent"} +test listbox-1.9 {configuration options} -body { + .l configure -borderwidth 1.3 + list [lindex [.l configure -borderwidth] 4] [.l cget -borderwidth] +} -cleanup { + .l configure -borderwidth [lindex [.l configure -borderwidth] 3] +} -result {1 1} +test listbox-1.10 {configuration options} -body { + .l configure -borderwidth badValue +} -returnCodes error -result {bad screen distance "badValue"} +test listbox-1.11 {configuration options} -body { + .l configure -cursor arrow + list [lindex [.l configure -cursor] 4] [.l cget -cursor] +} -cleanup { + .l configure -cursor [lindex [.l configure -cursor] 3] +} -result {arrow arrow} +test listbox-1.12 {configuration options} -body { + .l configure -cursor badValue +} -returnCodes error -result {bad cursor spec "badValue"} +test listbox-1.13 {configuration options} -body { + .l configure -disabledforeground #110022 + list [lindex [.l configure -disabledforeground] 4] [.l cget -disabledforeground] +} -cleanup { + .l configure -disabledforeground [lindex [.l configure -disabledforeground] 3] +} -result {{#110022} #110022} +test listbox-1.14 {configuration options} -body { + .l configure -disabledforeground bogus +} -returnCodes error -result {unknown color name "bogus"} +test listbox-1.15 {configuration options} -body { + .l configure -exportselection yes + list [lindex [.l configure -exportselection] 4] [.l cget -exportselection] +} -cleanup { + .l configure -exportselection [lindex [.l configure -exportselection] 3] +} -result {1 1} +test listbox-1.16 {configuration options} -body { + .l configure -exportselection xyzzy +} -returnCodes error -result {expected boolean value but got "xyzzy"} +test listbox-1.17 {configuration options} -body { + .l configure -fg #110022 + list [lindex [.l configure -fg] 4] [.l cget -fg] +} -cleanup { + .l configure -fg [lindex [.l configure -fg] 3] +} -result {{#110022} #110022} +test listbox-1.18 {configuration options} -body { + .l configure -fg bogus +} -returnCodes error -result {unknown color name "bogus"} +test listbox-1.19 {configuration options} -body { + .l configure -font {Helvetica 12} + list [lindex [.l configure -font] 4] [.l cget -font] +} -cleanup { + .l configure -font [lindex [.l configure -font] 3] +} -result {{Helvetica 12} {Helvetica 12}} +test listbox-1.21 {configuration options} -body { + .l configure -foreground #110022 + list [lindex [.l configure -foreground] 4] [.l cget -foreground] +} -cleanup { + .l configure -foreground [lindex [.l configure -foreground] 3] +} -result {{#110022} #110022} +test listbox-1.22 {configuration options} -body { + .l configure -foreground bogus +} -returnCodes error -result {unknown color name "bogus"} +test listbox-1.23 {configuration options} -body { + .l configure -height 30 + list [lindex [.l configure -height] 4] [.l cget -height] +} -cleanup { + .l configure -height [lindex [.l configure -height] 3] +} -result {30 30} +test listbox-1.24 {configuration options} -body { + .l configure -height 20p +} -returnCodes error -result {expected integer but got "20p"} +test listbox-1.25 {configuration options} -body { + .l configure -highlightbackground #112233 + list [lindex [.l configure -highlightbackground] 4] [.l cget -highlightbackground] +} -cleanup { + .l configure -highlightbackground [lindex [.l configure -highlightbackground] 3] +} -result {{#112233} #112233} +test listbox-1.26 {configuration options} -body { + .l configure -highlightbackground ugly +} -returnCodes error -result {unknown color name "ugly"} +test listbox-1.27 {configuration options} -body { + .l configure -highlightcolor #123456 + list [lindex [.l configure -highlightcolor] 4] [.l cget -highlightcolor] +} -cleanup { + .l configure -highlightcolor [lindex [.l configure -highlightcolor] 3] +} -result {{#123456} #123456} +test listbox-1.28 {configuration options} -body { + .l configure -highlightcolor bogus +} -returnCodes error -result {unknown color name "bogus"} +test listbox-1.29 {configuration options} -body { + .l configure -highlightthickness 6 + list [lindex [.l configure -highlightthickness] 4] [.l cget -highlightthickness] +} -cleanup { + .l configure -highlightthickness [lindex [.l configure -highlightthickness] 3] +} -result {6 6} +test listbox-1.30 {configuration options} -body { + .l configure -highlightthickness bogus +} -returnCodes error -result {bad screen distance "bogus"} +test listbox-1.31 {configuration options} -body { + .l configure -highlightthickness -2 + list [lindex [.l configure -highlightthickness] 4] [.l cget -highlightthickness] +} -cleanup { + .l configure -highlightthickness [lindex [.l configure -highlightthickness] 3] +} -result {0 0} +test listbox-1.32.1 {configuration options} -setup { + set res {} +} -body { + .l configure -justify left + set res [list [lindex [.l configure -justify] 4] [.l cget -justify]] + .l configure -justify center + lappend res [lindex [.l configure -justify] 4] [.l cget -justify] + .l configure -justify right + lappend res [lindex [.l configure -justify] 4] [.l cget -justify] +} -cleanup { + .l configure -justify [lindex [.l configure -justify] 3] +} -result {left left center center right right} +test listbox-1.32.2 {configuration options} -body { + .l configure -justify bogus +} -returnCodes error -result {bad justification "bogus": must be left, right, or center} +test listbox-1.33 {configuration options} -body { + .l configure -relief groove + list [lindex [.l configure -relief] 4] [.l cget -relief] +} -cleanup { + .l configure -relief [lindex [.l configure -relief] 3] +} -result {groove groove} +test listbox-1.34 {configuration options} -body { + .l configure -relief 1.5 +} -returnCodes error -result {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken} +test listbox-1.35 {configuration options} -body { + .l configure -selectbackground #110022 + list [lindex [.l configure -selectbackground] 4] [.l cget -selectbackground] +} -cleanup { + .l configure -selectbackground [lindex [.l configure -selectbackground] 3] +} -result {{#110022} #110022} +test listbox-1.36 {configuration options} -body { + .l configure -selectbackground bogus +} -returnCodes error -result {unknown color name "bogus"} +test listbox-1.37 {configuration options} -body { + .l configure -selectborderwidth 1.3 + list [lindex [.l configure -selectborderwidth] 4] [.l cget -selectborderwidth] +} -cleanup { + .l configure -selectborderwidth [lindex [.l configure -selectborderwidth] 3] +} -result {1 1} +test listbox-1.38 {configuration options} -body { + .l configure -selectborderwidth badValue +} -returnCodes error -result {bad screen distance "badValue"} +test listbox-1.39 {configuration options} -body { + .l configure -selectforeground #654321 + list [lindex [.l configure -selectforeground] 4] [.l cget -selectforeground] +} -cleanup { + .l configure -selectforeground [lindex [.l configure -selectforeground] 3] +} -result {{#654321} #654321} +test listbox-1.40 {configuration options} -body { + .l configure -selectforeground bogus +} -returnCodes error -result {unknown color name "bogus"} +test listbox-1.41 {configuration options} -body { + .l configure -selectmode string + list [lindex [.l configure -selectmode] 4] [.l cget -selectmode] +} -cleanup { + .l configure -selectmode [lindex [.l configure -selectmode] 3] +} -result {string string} +test listbox-1.43 {configuration options} -body { + .l configure -setgrid false + list [lindex [.l configure -setgrid] 4] [.l cget -setgrid] +} -cleanup { + .l configure -setgrid [lindex [.l configure -setgrid] 3] +} -result {0 0} +test listbox-1.44 {configuration options} -body { + .l configure -setgrid lousy +} -returnCodes error -result {expected boolean value but got "lousy"} +test listbox-1.45 {configuration options} -body { + .l configure -state disabled + list [lindex [.l configure -state] 4] [.l cget -state] +} -cleanup { + .l configure -state [lindex [.l configure -state] 3] +} -result {disabled disabled} +test listbox-1.46 {configuration options} -body { + .l configure -state foo +} -returnCodes error -result {bad state "foo": must be disabled or normal} +test listbox-1.47 {configuration options} -body { + .l configure -takefocus {any string} + list [lindex [.l configure -takefocus] 4] [.l cget -takefocus] +} -cleanup { + .l configure -takefocus [lindex [.l configure -takefocus] 3] +} -result {{any string} {any string}} +test listbox-1.49 {configuration options} -body { + .l configure -width 45 + list [lindex [.l configure -width] 4] [.l cget -width] +} -cleanup { + .l configure -width [lindex [.l configure -width] 3] +} -result {45 45} +test listbox-1.50 {configuration options} -body { + .l configure -width 3p +} -returnCodes error -result {expected integer but got "3p"} +test listbox-1.51 {configuration options} -body { + .l configure -xscrollcommand {Some command} + list [lindex [.l configure -xscrollcommand] 4] [.l cget -xscrollcommand] +} -cleanup { + .l configure -xscrollcommand [lindex [.l configure -xscrollcommand] 3] +} -result {{Some command} {Some command}} +test listbox-1.53 {configuration options} -body { + .l configure -yscrollcommand {Another command} + list [lindex [.l configure -yscrollcommand] 4] [.l cget -yscrollcommand] +} -cleanup { + .l configure -yscrollcommand [lindex [.l configure -yscrollcommand] 3] +} -result {{Another command} {Another command}} +test listbox-1.55 {configuration options} -body { + .l configure -listvar testVariable + list [lindex [.l configure -listvar] 4] [.l cget -listvar] +} -cleanup { + .l configure -listvar [lindex [.l configure -listvar] 3] +} -result {testVariable testVariable} + + +test listbox-2.1 {Tk_ListboxCmd procedure} -body { + listbox +} -returnCodes error -result {wrong # args: should be "listbox pathName ?-option value ...?"} +test listbox-2.2 {Tk_ListboxCmd procedure} -body { + listbox gorp +} -returnCodes error -result {bad window path name "gorp"} +test listbox-2.3 {Tk_ListboxCmd procedure} -setup { + destroy .l +} -body { + listbox .l + list [winfo exists .l] [winfo class .l] [info commands .l] +} -result {1 Listbox .l} +test listbox-2.4 {Tk_ListboxCmd procedure} -setup { + destroy .l +} -body { + listbox .l -gorp foo +} -cleanup { + destroy .l +} -returnCodes error -result {unknown option "-gorp"} +test listbox-2.4.1 {Tk_ListboxCmd procedure} -setup { + destroy .l +} -body { + catch {listbox .l -gorp foo} + list [winfo exists .l] [info commands .l] +} -cleanup { + destroy .l +} -result {0 {}} +test listbox-2.5 {Tk_ListboxCmd procedure} -setup { + destroy .l +} -body { + listbox .l +} -cleanup { + destroy .l +} -result {.l} + + +# Listbox used in 3.1 -3.115 tests +destroy .l +listbox .l -width 20 -height 5 -bd 4 -highlightthickness 1 -selectborderwidth 2 +pack .l +.l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 el12 el13 el14 \ + el15 el16 el17 +update +test listbox-3.1 {ListboxWidgetCmd procedure} -body { + .l +} -returnCodes error -result {wrong # args: should be ".l option ?arg ...?"} +test listbox-3.2 {ListboxWidgetCmd procedure, "activate" option} -body { + .l activate +} -returnCodes error -result {wrong # args: should be ".l activate index"} +test listbox-3.3 {ListboxWidgetCmd procedure, "activate" option} -body { + .l activate a b +} -returnCodes error -result {wrong # args: should be ".l activate index"} +test listbox-3.4 {ListboxWidgetCmd procedure, "activate" option} -body { + .l activate fooey +} -returnCodes error -result {bad listbox index "fooey": must be active, anchor, end, @x,y, or a number} +test listbox-3.5 {ListboxWidgetCmd procedure, "activate" option} -body { + .l activate 3 + .l index active +} -result 3 +test listbox-3.6 {ListboxWidgetCmd procedure, "activate" option} -body { + .l activate -1 + .l index active +} -result {0} +test listbox-3.7 {ListboxWidgetCmd procedure, "activate" option} -body { + .l activate 30 + .l index active +} -result {17} +test listbox-3.8 {ListboxWidgetCmd procedure, "activate" option} -body { + .l activate end + .l index active +} -result {17} +test listbox-3.9 {ListboxWidgetCmd procedure, "bbox" option} -body { + .l bbox +} -returnCodes error -result {wrong # args: should be ".l bbox index"} +test listbox-3.10 {ListboxWidgetCmd procedure, "bbox" option} -body { + .l bbox a b +} -returnCodes error -result {wrong # args: should be ".l bbox index"} +test listbox-3.11 {ListboxWidgetCmd procedure, "bbox" option} -body { + .l bbox fooey +} -returnCodes error -result {bad listbox index "fooey": must be active, anchor, end, @x,y, or a number} +test listbox-3.12 {ListboxWidgetCmd procedure, "bbox" option} -body { + .l yview 3 + update + list [.l bbox 2] [.l bbox 8] +} -result {{} {}} +test listbox-3.13 {ListboxWidgetCmd procedure, "bbox" option} -cleanup { + destroy .l2 +} -body { + # Used to generate a core dump before a bug was fixed (the last + # element would be on-screen if it existed, but it doesn't exist). + + listbox .l2 + pack .l2 -side top + tkwait visibility .l2 + set x [.l2 bbox 0] + destroy .l2 + set x +} -cleanup { + destroy .l2 +} -result {} +test listbox-3.14 {ListboxWidgetCmd procedure, "bbox" option} -constraints { + fonts +} -body { + .l yview 3 + update + list [.l bbox 3] [.l bbox 4] +} -result {{7 7 17 14} {7 26 17 14}} +test listbox-3.15 {ListboxWidgetCmd procedure, "bbox" option} -constraints { + fonts +} -body { + .l yview 0 + update + list [.l bbox -1] [.l bbox 0] +} -result {{} {7 7 17 14}} +test listbox-3.16 {ListboxWidgetCmd procedure, "bbox" option} -constraints { + fonts +} -body { + .l yview end + update + list [.l bbox 17] [.l bbox end] [.l bbox 18] +} -result {{7 83 24 14} {7 83 24 14} {}} +test listbox-3.17 {ListboxWidgetCmd procedure, "bbox" option} -constraints { + fonts +} -setup { + destroy .t +} -body { + toplevel .t + wm geom .t +0+0 + listbox .t.l -width 10 -height 5 + .t.l insert 0 "Short" "Somewhat longer" "Really, quite a whole lot longer than can possibly fit on the screen" "Short" + pack .t.l + update + .t.l xview moveto .2 + .t.l bbox 2 +} -cleanup { + destroy .t +} -result {-72 39 393 14} +test listbox-3.18 {ListboxWidgetCmd procedure, "bbox" option, partial last line} -constraints { + fonts +} -body { + mkPartial + list [.partial.l bbox 3] [.partial.l bbox 4] +} -result {{5 56 24 14} {5 73 23 14}} +test listbox-3.18a {ListboxWidgetCmd procedure, "bbox" option, justified} -constraints { + fonts +} -setup { + destroy .top.l .top + unset -nocomplain res +} -body { + toplevel .top + listbox .top.l -justify left + .top.l insert end Item1 LongerItem2 MuchLongerItem3 + pack .top.l + update + lappend res [.top.l bbox 0] [.top.l bbox 1] [.top.l bbox 2] + .top.l configure -justify center + lappend res [.top.l bbox 0] [.top.l bbox 1] [.top.l bbox 2] + .top.l configure -justify right + lappend res [.top.l bbox 0] [.top.l bbox 1] [.top.l bbox 2] +} -cleanup { + destroy .top.l .top + unset -nocomplain res +} -result [list \ + {5 5 34 14} {5 22 74 14} {5 39 106 14} \ + {58 5 34 14} {38 22 74 14} {22 39 106 14} \ + {111 5 34 14} {71 22 74 14} {39 39 106 14} \ +] +test listbox-3.18b {ListboxWidgetCmd procedure, "bbox" option, justified, non-default borderwidth} -setup { + destroy .top.l .top + unset -nocomplain lres res +} -body { + # This test checks whether all "x" values from bbox for different size + # items with different justification settings are all positive or zero + # This checks a bit the calculation of this x value with non-default + # borders widths of the listbox + toplevel .top + listbox .top.l -justify left -borderwidth 17 -highlightthickness 19 -selectborderwidth 22 + .top.l insert end Item1 LongerItem2 MuchLongerItem3 + .top.l selection set 1 + pack .top.l + update + lappend lres [.top.l bbox 0] [.top.l bbox 1] [.top.l bbox 2] + .top.l configure -justify center + lappend lres [.top.l bbox 0] [.top.l bbox 1] [.top.l bbox 2] + .top.l configure -justify right + lappend lres [.top.l bbox 0] [.top.l bbox 1] [.top.l bbox 2] + set res 1 + for {set i 0} {$i < [llength $lres]} {incr i 4} { + set res [expr {$res * [expr {[lindex $lres $i] >= 0}] }] + } + set res +} -cleanup { + destroy .top.l .top + unset -nocomplain lres res +} -result {1} +test listbox-3.19 {ListboxWidgetCmd procedure, "cget" option} -body { + .l cget +} -returnCodes error -result {wrong # args: should be ".l cget option"} +test listbox-3.20 {ListboxWidgetCmd procedure, "cget" option} -body { + .l cget a b +} -returnCodes error -result {wrong # args: should be ".l cget option"} +test listbox-3.21 {ListboxWidgetCmd procedure, "cget" option} -body { + .l cget -gorp +} -returnCodes error -result {unknown option "-gorp"} +test listbox-3.22 {ListboxWidgetCmd procedure, "cget" option} -body { + .l cget -setgrid +} -result {0} +test listbox-3.23 {ListboxWidgetCmd procedure, "configure" option} -body { + llength [.l configure] +} -result {28} +test listbox-3.24 {ListboxWidgetCmd procedure, "configure" option} -body { + .l configure -gorp +} -returnCodes error -result {unknown option "-gorp"} +test listbox-3.25 {ListboxWidgetCmd procedure, "configure" option} -body { + .l configure -setgrid +} -result {-setgrid setGrid SetGrid 0 0} +test listbox-3.26 {ListboxWidgetCmd procedure, "configure" option} -body { + .l configure -gorp is_messy +} -returnCodes error -result {unknown option "-gorp"} +test listbox-3.27 {ListboxWidgetCmd procedure, "configure" option} -body { + set oldbd [.l cget -bd] + set oldht [.l cget -highlightthickness] + .l configure -bd 3 -highlightthickness 0 + set x "[.l cget -bd] [.l cget -highlightthickness]" + .l configure -bd $oldbd -highlightthickness $oldht + set x +} -result {3 0} +test listbox-3.28 {ListboxWidgetCmd procedure, "curselection" option} -body { + .l curselection a +} -returnCodes error -result {wrong # args: should be ".l curselection"} +test listbox-3.29 {ListboxWidgetCmd procedure, "curselection" option} -body { + .l selection clear 0 end + .l selection set 3 6 + .l selection set 9 + .l curselection +} -result {3 4 5 6 9} +test listbox-3.30 {ListboxWidgetCmd procedure, "delete" option} -body { + .l delete +} -returnCodes error -result {wrong # args: should be ".l delete firstIndex ?lastIndex?"} +test listbox-3.31 {ListboxWidgetCmd procedure, "delete" option} -body { + .l delete a b c +} -returnCodes error -result {wrong # args: should be ".l delete firstIndex ?lastIndex?"} +test listbox-3.32 {ListboxWidgetCmd procedure, "delete" option} -body { + .l delete badIndex +} -returnCodes error -result {bad listbox index "badIndex": must be active, anchor, end, @x,y, or a number} +test listbox-3.33 {ListboxWidgetCmd procedure, "delete" option} -body { + .l delete 2 123ab +} -returnCodes error -result {bad listbox index "123ab": must be active, anchor, end, @x,y, or a number} +test listbox-3.34 {ListboxWidgetCmd procedure, "delete" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7 + .l2 delete 3 + list [.l2 get 2] [.l2 get 3] [.l2 index end] +} -cleanup { + destroy .l2 +} -result {el2 el4 7} +test listbox-3.35 {ListboxWidgetCmd procedure, "delete" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7 + .l2 delete 2 4 + list [.l2 get 1] [.l2 get 2] [.l2 index end] +} -cleanup { + destroy .l2 +} -result {el1 el5 5} +test listbox-3.36 {ListboxWidgetCmd procedure, "delete" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7 + .l2 delete -3 2 + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result {el3 el4 el5 el6 el7} +test listbox-3.37 {ListboxWidgetCmd procedure, "delete" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7 + .l2 delete -3 -1 + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result {el0 el1 el2 el3 el4 el5 el6 el7} +test listbox-3.38 {ListboxWidgetCmd procedure, "delete" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7 + .l2 delete 2 end + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result {el0 el1} +test listbox-3.39 {ListboxWidgetCmd procedure, "delete" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7 + .l2 delete 5 20 + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result {el0 el1 el2 el3 el4} +test listbox-3.40 {ListboxWidgetCmd procedure, "delete" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7 + .l2 delete end 20 + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result {el0 el1 el2 el3 el4 el5 el6} +test listbox-3.41 {ListboxWidgetCmd procedure, "delete" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7 + .l2 delete 8 20 + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result {el0 el1 el2 el3 el4 el5 el6 el7} +test listbox-3.42 {ListboxWidgetCmd procedure, "get" option} -body { + .l get +} -returnCodes error -result {wrong # args: should be ".l get firstIndex ?lastIndex?"} +test listbox-3.43 {ListboxWidgetCmd procedure, "get" option} -body { + .l get a b c +} -returnCodes error -result {wrong # args: should be ".l get firstIndex ?lastIndex?"} +test listbox-3.44 {ListboxWidgetCmd procedure, "get" option} -body { + .l get 2.4 +} -returnCodes error -result {bad listbox index "2.4": must be active, anchor, end, @x,y, or a number} +test listbox-3.45 {ListboxWidgetCmd procedure, "get" option} -body { + .l get end bogus +} -returnCodes error -result {bad listbox index "bogus": must be active, anchor, end, @x,y, or a number} +test listbox-3.46 {ListboxWidgetCmd procedure, "get" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7 + list [.l2 get 0] [.l2 get 3] [.l2 get end] +} -cleanup { + destroy .l2 +} -result {el0 el3 el7} +test listbox-3.47 {ListboxWidgetCmd procedure, "get" option} -setup { + destroy .l2 +} -body { + listbox .l2 + list [.l2 get 0] [.l2 get end] +} -cleanup { + destroy .l2 +} -result {{} {}} +test listbox-3.48 {ListboxWidgetCmd procedure, "get" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el0 el1 el2 "two words" el4 el5 el6 el7 + .l2 get 3 end +} -cleanup { + destroy .l2 +} -result {{two words} el4 el5 el6 el7} +test listbox-3.49 {ListboxWidgetCmd procedure, "get" option} -body { + .l get -1 +} -result {} +test listbox-3.50 {ListboxWidgetCmd procedure, "get" option} -body { + .l get -2 -1 +} -result {} +test listbox-3.51 {ListboxWidgetCmd procedure, "get" option} -body { + .l get -2 3 +} -result {el0 el1 el2 el3} +test listbox-3.52 {ListboxWidgetCmd procedure, "get" option} -body { + .l get 12 end +} -result {el12 el13 el14 el15 el16 el17} +test listbox-3.53 {ListboxWidgetCmd procedure, "get" option} -body { + .l get 12 20 +} -result {el12 el13 el14 el15 el16 el17} +test listbox-3.54 {ListboxWidgetCmd procedure, "get" option} -body { + .l get end +} -result {el17} +test listbox-3.55 {ListboxWidgetCmd procedure, "get" option} -body { + .l get 30 +} -result {} +test listbox-3.56 {ListboxWidgetCmd procedure, "get" option} -body { + .l get 30 35 +} -result {} +test listbox-3.57 {ListboxWidgetCmd procedure, "index" option} -body { + .l index +} -returnCodes error -result {wrong # args: should be ".l index index"} +test listbox-3.58 {ListboxWidgetCmd procedure, "index" option} -body { + .l index a b +} -returnCodes error -result {wrong # args: should be ".l index index"} +test listbox-3.59 {ListboxWidgetCmd procedure, "index" option} -body { + .l index @ +} -returnCodes error -result {bad listbox index "@": must be active, anchor, end, @x,y, or a number} +test listbox-3.60 {ListboxWidgetCmd procedure, "index" option} -body { + .l index 2 +} -result 2 +test listbox-3.61 {ListboxWidgetCmd procedure, "index" option} -body { + .l index -1 +} -result {-1} +test listbox-3.62 {ListboxWidgetCmd procedure, "index" option} -body { + .l index end +} -result 18 +test listbox-3.63 {ListboxWidgetCmd procedure, "index" option} -body { + .l index 34 +} -result 34 +test listbox-3.64 {ListboxWidgetCmd procedure, "insert" option} -body { + .l insert +} -returnCodes error -result {wrong # args: should be ".l insert index ?element ...?"} +test listbox-3.65 {ListboxWidgetCmd procedure, "insert" option} -body { + .l insert badIndex +} -returnCodes error -result {bad listbox index "badIndex": must be active, anchor, end, @x,y, or a number} +test listbox-3.66 {ListboxWidgetCmd procedure, "insert" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert end a b c d e + .l2 insert 3 x y z + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result {a b c x y z d e} +test listbox-3.67 {ListboxWidgetCmd procedure, "insert" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert end a b c + .l2 insert -1 x + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result {x a b c} +test listbox-3.68 {ListboxWidgetCmd procedure, "insert" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert end a b c + .l2 insert end x + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result {a b c x} +test listbox-3.69 {ListboxWidgetCmd procedure, "insert" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert end a b c + .l2 insert 43 x + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result {a b c x} +test listbox-3.70 {ListboxWidgetCmd procedure, "nearest" option} -body { + .l nearest +} -returnCodes error -result {wrong # args: should be ".l nearest y"} +test listbox-3.71 {ListboxWidgetCmd procedure, "nearest" option} -body { + .l nearest a b +} -returnCodes error -result {wrong # args: should be ".l nearest y"} +test listbox-3.72 {ListboxWidgetCmd procedure, "nearest" option} -body { + .l nearest 20p +} -returnCodes error -result {expected integer but got "20p"} +test listbox-3.73 {ListboxWidgetCmd procedure, "nearest" option} -body { + .l yview 3 + .l nearest 1000 +} -result {7} +test listbox-3.74 {ListboxWidgetCmd procedure, "scan" option} -body { + .l scan a b +} -returnCodes error -result {wrong # args: should be ".l scan mark|dragto x y"} +test listbox-3.75 {ListboxWidgetCmd procedure, "scan" option} -body { + .l scan a b c d +} -returnCodes error -result {wrong # args: should be ".l scan mark|dragto x y"} +test listbox-3.76 {ListboxWidgetCmd procedure, "scan" option} -body { + .l scan foo bogus 2 +} -returnCodes error -result {expected integer but got "bogus"} +test listbox-3.77 {ListboxWidgetCmd procedure, "scan" option} -body { + .l scan foo 2 2.3 +} -returnCodes error -result {expected integer but got "2.3"} +test listbox-3.78 {ListboxWidgetCmd procedure, "scan" option} -constraints { + fonts +} -setup { + destroy .t +} -body { + toplevel .t + wm geom .t +0+0 + listbox .t.l -width 10 -height 5 + .t.l insert 0 "Short" "Somewhat longer" "Really, quite a whole lot longer than can possibly fit on the screen" "Short" a b c d e f g h i j + pack .t.l + update + .t.l scan mark 100 140 + .t.l scan dragto 90 137 + update + list [format {%.6g %.6g} {*}[.t.l xview]] [format {%.6g %.6g} {*}[.t.l yview]] +} -cleanup { + destroy .t +} -result {{0.249364 0.427481} {0.0714286 0.428571}} +test listbox-3.79 {ListboxWidgetCmd procedure, "scan" option} -body { + .l scan foo 2 4 +} -returnCodes error -result {bad option "foo": must be mark or dragto} +test listbox-3.80 {ListboxWidgetCmd procedure, "see" option} -body { + .l see +} -returnCodes error -result {wrong # args: should be ".l see index"} +test listbox-3.81 {ListboxWidgetCmd procedure, "see" option} -body { + .l see a b +} -returnCodes error -result {wrong # args: should be ".l see index"} +test listbox-3.82 {ListboxWidgetCmd procedure, "see" option} -body { + .l see gorp +} -returnCodes error -result {bad listbox index "gorp": must be active, anchor, end, @x,y, or a number} +test listbox-3.83 {ListboxWidgetCmd procedure, "see" option} -body { + .l yview 7 + .l see 7 + .l index @0,0 +} -result {7} +test listbox-3.84 {ListboxWidgetCmd procedure, "see" option} -body { + .l yview 7 + .l see 11 + .l index @0,0 +} -result {7} +test listbox-3.85 {ListboxWidgetCmd procedure, "see" option} -body { + .l yview 7 + .l see 6 + .l index @0,0 +} -result {6} +test listbox-3.86 {ListboxWidgetCmd procedure, "see" option} -body { + .l yview 7 + .l see 5 + .l index @0,0 +} -result {3} +test listbox-3.87 {ListboxWidgetCmd procedure, "see" option} -body { + .l yview 7 + .l see 12 + .l index @0,0 +} -result {8} +test listbox-3.88 {ListboxWidgetCmd procedure, "see" option} -body { + .l yview 7 + .l see 13 + .l index @0,0 +} -result {11} +test listbox-3.89 {ListboxWidgetCmd procedure, "see" option} -body { + .l yview 7 + .l see -1 + .l index @0,0 +} -result {0} +test listbox-3.90 {ListboxWidgetCmd procedure, "see" option} -body { + .l yview 7 + .l see end + .l index @0,0 +} -result {13} +test listbox-3.91 {ListboxWidgetCmd procedure, "see" option} -body { + .l yview 7 + .l see 322 + .l index @0,0 +} -result {13} +test listbox-3.92 {ListboxWidgetCmd procedure, "see" option, partial last line} -body { + mkPartial + .partial.l see 4 + .partial.l index @0,0 +} -result {1} +test listbox-3.93 {ListboxWidgetCmd procedure, "selection" option} -body { + .l select a +} -returnCodes error -result {wrong # args: should be ".l selection option index ?index?"} +test listbox-3.94 {ListboxWidgetCmd procedure, "selection" option} -body { + .l select a b c d +} -returnCodes error -result {wrong # args: should be ".l selection option index ?index?"} +test listbox-3.95 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection a bogus +} -returnCodes error -result {bad listbox index "bogus": must be active, anchor, end, @x,y, or a number} +test listbox-3.96 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection a 0 lousy +} -returnCodes error -result {bad listbox index "lousy": must be active, anchor, end, @x,y, or a number} +test listbox-3.97 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection anchor 0 0 +} -returnCodes error -result {wrong # args: should be ".l selection anchor index"} +test listbox-3.98 {ListboxWidgetCmd procedure, "selection" option} -body { + list [.l selection anchor 5; .l index anchor] \ + [.l selection anchor 0; .l index anchor] +} -result {5 0} +test listbox-3.99 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection anchor -1 + .l index anchor +} -result {0} +test listbox-3.100 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection anchor end + .l index anchor +} -result {17} +test listbox-3.101 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection anchor 44 + .l index anchor +} -result {17} +test listbox-3.102 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection clear 0 end + .l selection set 2 8 + .l selection clear 3 4 + .l curselection +} -result {2 5 6 7 8} +test listbox-3.103 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection includes 0 0 +} -returnCodes error -result {wrong # args: should be ".l selection includes index"} +test listbox-3.104 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection clear 0 end + .l selection set 2 8 + .l selection clear 4 + list [.l selection includes 3] [.l selection includes 4] \ + [.l selection includes 5] +} -result {1 0 1} +test listbox-3.105 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection set 0 end + .l selection includes -1 +} -result {0} +test listbox-3.106 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection clear 0 end + .l selection set end + .l selection includes end +} -result {1} +test listbox-3.107 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection set 0 end + .l selection includes 44 +} -result {0} +test listbox-3.108 {ListboxWidgetCmd procedure, "selection" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 selection includes 0 +} -cleanup { + destroy .l2 +} -result {0} +test listbox-3.109 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection clear 0 end + .l selection set 2 + .l selection set 5 7 + .l curselection +} -result {2 5 6 7} +test listbox-3.110 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection clear 0 end + .l selection set 2 + .l selection set 5 7 + .l selection set 5 7 + .l curselection +} -result {2 5 6 7} +test listbox-3.111 {ListboxWidgetCmd procedure, "selection" option} -body { + .l selection badOption 0 0 +} -returnCodes error -result {bad option "badOption": must be anchor, clear, includes, or set} +test listbox-3.112 {ListboxWidgetCmd procedure, "size" option} -body { + .l size a +} -returnCodes error -result {wrong # args: should be ".l size"} +test listbox-3.113 {ListboxWidgetCmd procedure, "size" option} -body { + .l size +} -result {18} +test listbox-3.114 {ListboxWidgetCmd procedure, "xview" option} -setup { + destroy .l2 +} -body { + listbox .l2 + update + format {%.6g %.6g} {*}[.l2 xview] +} -cleanup { + destroy .l2 +} -result {0 1} +test listbox-3.115 {ListboxWidgetCmd procedure, "xview" option} -setup { + destroy .l2 +} -body { + listbox .l2 -width 10 -height 5 -font $fixed + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + pack .l2 + update + format {%.6g %.6g} {*}[.l2 xview] +} -cleanup { + destroy .l2 +} -result {0 1} + +test listbox-3.116 {ListboxWidgetCmd procedure, "xview" option} -constraints { + fonts +} -setup { + destroy .l2 + listbox .l2 -width 10 -height 5 -font $fixed + pack .l2 + update +} -body { + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + .l2 insert 1 "0123456789a123456789b123456789c123456789d123456789" + .l2 xview 4 + format {%.6g %.6g} {*}[.l2 xview] +} -cleanup { + destroy .l2 +} -result {0.08 0.28} +test listbox-3.117 {ListboxWidgetCmd procedure, "xview" option} -body { + .l xview foo +} -returnCodes error -result {expected integer but got "foo"} +test listbox-3.118 {ListboxWidgetCmd procedure, "xview" option} -body { + .l xview zoom a b +} -returnCodes error -result {unknown option "zoom": must be moveto or scroll} +test listbox-3.119 {ListboxWidgetCmd procedure, "xview" option} -constraints { + fonts +} -setup { + destroy .l2 + listbox .l2 -width 10 -height 5 -font $fixed + pack .l2 + update +} -body { + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + .l2 insert 1 "0123456789a123456789b123456789c123456789d123456789" + .l xview 0 + .l2 xview moveto .4 + update + format {%.6g %.6g} {*}[.l2 xview] +} -cleanup { + destroy .l2 +} -result {0.4 0.6} +test listbox-3.120 {ListboxWidgetCmd procedure, "xview" option} -constraints { + fonts +} -setup { + destroy .l2 + listbox .l2 -width 10 -height 5 -font $fixed + pack .l2 + update +} -body { + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + .l2 insert 1 "0123456789a123456789b123456789c123456789d123456789" + .l2 xview 0 + .l2 xview scroll 2 units + update + format {%.6g %.6g} {*}[.l2 xview] +} -cleanup { + destroy .l2 +} -result {0.04 0.24} +test listbox-3.121 {ListboxWidgetCmd procedure, "xview" option} -constraints { + fonts +} -setup { + destroy .l2 + listbox .l2 -width 10 -height 5 -font $fixed + pack .l2 + update +} -body { + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + .l2 insert 1 "0123456789a123456789b123456789c123456789d123456789" + .l2 xview 30 + .l2 xview scroll -1 pages + update + format {%.6g %.6g} {*}[.l2 xview] +} -cleanup { + destroy .l2 +} -result {0.44 0.64} +test listbox-3.122 {ListboxWidgetCmd procedure, "xview" option} -constraints { + fonts +} -setup { + destroy .l2 + listbox .l2 -width 10 -height 5 -font $fixed + pack .l2 + update +} -body { + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + .l2 insert 1 "0123456789a123456789b123456789c123456789d123456789" + .l2 configure -width 1 + update + .l2 xview 30 + .l2 xview scroll -4 pages + update + format {%.6g %.6g} {*}[.l2 xview] +} -cleanup { + destroy .l2 +} -result {0.52 0.54} +test listbox-3.123 {ListboxWidgetCmd procedure, "yview" option} -setup { + destroy .l2 +} -body { + listbox .l2 + pack .l2 + update + format {%.6g %.6g} {*}[.l2 yview] +} -cleanup { + destroy .l2 +} -result {0 1} +test listbox-3.124 {ListboxWidgetCmd procedure, "yview" option} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 el1 + pack .l2 + update + format {%.6g %.6g} {*}[.l2 yview] +} -cleanup { + destroy .l2 +} -result {0 1} + +test listbox-3.125 {ListboxWidgetCmd procedure, "yview" option} -setup { + destroy .l2 + listbox .l2 -width 10 -height 5 -font $fixed + pack .l2 + update +} -body { + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + .l2 yview 4 + update + format {%.6g %.6g} {*}[.l2 yview] +} -cleanup { + destroy .l2 +} -result {0.2 0.45} +test listbox-3.126 {ListboxWidgetCmd procedure, "yview" option, partial last line} -setup { + destroy .l + listbox .l -width 10 -height 5 -font $fixed + pack .l + update +} -body { + .l insert 0 a b c d e f g h i j k l m n o p q r s t + mkPartial + format {%.6g %.6g} {*}[.partial.l yview] +} -cleanup { + destroy .l +} -result {0 0.266667} + +# Listbox used in 3.127 -3.137 tests +destroy .l +listbox .l -width 20 -height 5 -bd 4 -highlightthickness 1 -selectborderwidth 2 +pack .l +.l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 el12 el13 el14 \ + el15 el16 el17 +update +test listbox-3.127 {ListboxWidgetCmd procedure, "xview" option} -body { + .l yview foo +} -returnCodes error -result {bad listbox index "foo": must be active, anchor, end, @x,y, or a number} +test listbox-3.128 {ListboxWidgetCmd procedure, "xview" option} -body { + .l yview foo a b +} -returnCodes error -result {unknown option "foo": must be moveto or scroll} +test listbox-3.129 {ListboxWidgetCmd procedure, "xview" option} -setup { + destroy .l2 + listbox .l2 -width 10 -height 5 -font $fixed + pack .l2 + update +} -body { + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + .l2 yview 0 + .l2 yview moveto .31 + format {%.6g %.6g} {*}[.l2 yview] +} -cleanup { + destroy .l2 +} -result {0.3 0.55} +test listbox-3.130 {ListboxWidgetCmd procedure, "xview" option} -setup { + destroy .l2 + listbox .l2 -width 10 -height 5 -font $fixed + pack .l2 + update +} -body { + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + .l2 yview 2 + .l2 yview scroll 2 pages + format {%.6g %.6g} {*}[.l2 yview] +} -cleanup { + destroy .l2 +} -result {0.4 0.65} +test listbox-3.131 {ListboxWidgetCmd procedure, "xview" option} -setup { + destroy .l2 + listbox .l2 -width 10 -height 5 -font $fixed + pack .l2 + update +} -body { + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + .l2 yview 10 + .l2 yview scroll -3 units + format {%.6g %.6g} {*}[.l2 yview] +} -cleanup { + destroy .l2 +} -result {0.35 0.6} +test listbox-3.132 {ListboxWidgetCmd procedure, "xview" option} -setup { + destroy .l2 + listbox .l2 -width 10 -height 5 -font $fixed + pack .l2 + update +} -body { + .l2 insert 0 a b c d e f g h i j k l m n o p q r s t + .l2 configure -height 2 + update + .l2 yview 15 + .l2 yview scroll -4 pages + format {%.6g %.6g} {*}[.l2 yview] +} -cleanup { + destroy .l2 +} -result {0.55 0.65} +test listbox-3.133 {ListboxWidgetCmd procedure, "xview" option} -body { + .l whoknows +} -returnCodes error -result {bad option "whoknows": must be activate, bbox, cget, configure, curselection, delete, get, index, insert, itemcget, itemconfigure, nearest, scan, see, selection, size, xview, or yview} +test listbox-3.134 {ListboxWidgetCmd procedure, "xview" option} -body { + .l c +} -returnCodes error -result {ambiguous option "c": must be activate, bbox, cget, configure, curselection, delete, get, index, insert, itemcget, itemconfigure, nearest, scan, see, selection, size, xview, or yview} +test listbox-3.135 {ListboxWidgetCmd procedure, "xview" option} -body { + .l in +} -returnCodes error -result {ambiguous option "in": must be activate, bbox, cget, configure, curselection, delete, get, index, insert, itemcget, itemconfigure, nearest, scan, see, selection, size, xview, or yview} +test listbox-3.136 {ListboxWidgetCmd procedure, "xview" option} -body { + .l s +} -returnCodes error -result {ambiguous option "s": must be activate, bbox, cget, configure, curselection, delete, get, index, insert, itemcget, itemconfigure, nearest, scan, see, selection, size, xview, or yview} +test listbox-3.137 {ListboxWidgetCmd procedure, "xview" option} -body { + .l se +} -returnCodes error -result {ambiguous option "se": must be activate, bbox, cget, configure, curselection, delete, get, index, insert, itemcget, itemconfigure, nearest, scan, see, selection, size, xview, or yview} + +# No tests for DestroyListbox: I can't come up with anything to test +# in this procedure. + + +test listbox-4.1 {ConfigureListbox procedure} -constraints { + fonts +} -setup { + deleteWindows + destroy .l + listbox .l -setgrid 1 -width 25 -height 15 + pack .l + update +} -body { + update + set x [getsize .] + .l configure -setgrid 0 + update + list $x [getsize .] +} -cleanup { + deleteWindows +} -result {25x15 185x263} +resetGridInfo +test listbox-4.2 {ConfigureListbox procedure} -setup { + deleteWindows + destroy .l + listbox .l -setgrid 1 -width 25 -height 15 + pack .l + update +} -body { + .l configure -highlightthickness -3 + .l cget -highlightthickness +} -cleanup { + deleteWindows +} -result {0} +test listbox-4.3 {ConfigureListbox procedure} -setup { + deleteWindows + destroy .l + listbox .l -setgrid 1 -width 25 -height 15 + pack .l + update +} -body { + .l configure -exportselection 0 + .l delete 0 end + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 + .l selection set 3 5 + .l configure -exportselection 1 + selection get +} -cleanup { + deleteWindows +} -result {el3 +el4 +el5} +test listbox-4.4 {ConfigureListbox procedure} -setup { + deleteWindows + listbox .l -setgrid 1 -width 25 -height 15 + pack .l + update +} -body { + entry .e + .e insert 0 abc + .e select from 0 + .e select to 2 + .l configure -exportselection 0 + .l delete 0 end + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 + .l selection set 3 5 + .l selection clear 3 5 + .l configure -exportselection 1 + list [selection own] [selection get] +} -cleanup { + deleteWindows +} -result {.e ab} +test listbox-4.5 {-exportselection option} -setup { + deleteWindows + listbox .l -setgrid 1 -width 25 -height 15 + pack .l + update +} -body { + selection clear . + .l configure -exportselection 1 + .l delete 0 end + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 + .l selection set 1 1 + set x {} + lappend x [catch {selection get} msg] $msg [.l curselection] + .l config -exportselection 0 + lappend x [catch {selection get} msg] $msg [.l curselection] + .l selection clear 0 end + lappend x [catch {selection get} msg] $msg [.l curselection] + .l selection set 1 3 + lappend x [catch {selection get} msg] $msg [.l curselection] + .l config -exportselection 1 + lappend x [catch {selection get} msg] $msg [.l curselection] +} -cleanup { + deleteWindows +} -result {0 el1 1 1 {PRIMARY selection doesn't exist or form "STRING" not defined} 1 1 {PRIMARY selection doesn't exist or form "STRING" not defined} {} 1 {PRIMARY selection doesn't exist or form "STRING" not defined} {1 2 3} 0 {el1 +el2 +el3} {1 2 3}} +test listbox-4.6 {ConfigureListbox procedure} -constraints { + fonts +} -setup { + deleteWindows +} -body { + + # The following code (reset geometry, withdraw, etc.) is necessary + # to reset the state of some window managers like olvwm under + # SunOS 4.1.3. + + wm geom . 300x300 + update + wm geom . {} + wm withdraw . + listbox .l2 -font $fixed -width 15 -height 20 + pack .l2 + update + wm deiconify . + set x [getsize .] + .l2 configure -setgrid 1 + update + list $x [getsize .] +} -cleanup { + deleteWindows +} -result {115x328 15x20} +test listbox-4.7 {ConfigureListbox procedure} -setup { + deleteWindows +} -body { + wm withdraw . + listbox .l2 -font $fixed -width 30 -height 20 -setgrid 1 + wm geom . +25+25 + pack .l2 + update + wm deiconify . + set result [getsize .] + wm geom . 26x15 + update + lappend result [getsize .] + .l2 configure -setgrid 1 + update + lappend result [getsize .] +} -cleanup { + deleteWindows + wm geom . {} +} -result {30x20 26x15 26x15} + +resetGridInfo +test listbox-4.8 {ConfigureListbox procedure} -setup { + destroy .l2 +} -body { + listbox .l2 -width 15 -height 20 -xscrollcommand "record x" \ + -yscrollcommand "record y" + pack .l2 + update + .l2 configure -fg black + set log {} + update + set log +} -cleanup { + destroy .l2 +} -result {{y 0 1} {x 0 1}} +test listbox-4.9 {ConfigureListbox procedure, -listvar} -setup { + destroy .l2 +} -body { + set x [list a b c d] + listbox .l2 -listvar x + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result [list a b c d] +test listbox-4.10 {ConfigureListbox, no listvar -> existing listvar} -setup { + destroy .l2 +} -body { + set x [list a b c d] + listbox .l2 + .l2 insert end 1 2 3 4 + .l2 configure -listvar x + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result [list a b c d] +test listbox-4.11 {ConfigureListbox procedure, listvar -> no listvar} -setup { + destroy .l2 +} -body { + set x [list a b c d] + listbox .l2 -listvar x + .l2 configure -listvar {} + .l2 insert end 1 2 3 4 + list $x [.l2 get 0 end] +} -cleanup { + destroy .l2 +} -result [list [list a b c d] [list a b c d 1 2 3 4]] +test listbox-4.12 {ConfigureListbox procedure, listvar -> different listvar} -setup { + destroy .l2 +} -body { + set x [list a b c d] + set y [list 1 2 3 4] + listbox .l2 + .l2 configure -listvar x + .l2 configure -listvar y + .l2 insert end 5 6 7 8 + list $x $y +} -cleanup { + destroy .l2 +} -result [list [list a b c d] [list 1 2 3 4 5 6 7 8]] +test listbox-4.13 {ConfigureListbox, no listvar -> non-existant listvar} -setup { + destroy .l2 +} -body { + catch {unset x} + listbox .l2 + .l2 insert end a b c d + .l2 configure -listvar x + set x +} -cleanup { + destroy .l2 +} -result [list a b c d] +test listbox-4.14 {ConfigureListbox, non-existant listvar} -setup { + destroy .l2 +} -body { + catch {unset x} + listbox .l2 -listvar x + list [info exists x] $x +} -cleanup { + destroy .l2 +} -result [list 1 {}] +test listbox-4.15 {ConfigureListbox, listvar -> non-existant listvar} -setup { + destroy .l2 +} -body { + catch {unset y} + set x [list a b c d] + listbox .l2 -listvar x + .l2 configure -listvar y + list [info exists y] $y +} -cleanup { + destroy .l2 +} -result [list 1 [list a b c d]] +test listbox-4.16 {ConfigureListbox, listvar -> same listvar} -setup { + destroy .l2 +} -body { + set x [list a b c d] + listbox .l2 -listvar x + .l2 configure -listvar x + set x +} -cleanup { + destroy .l2 +} -result [list a b c d] +test listbox-4.17 {ConfigureListbox, no listvar -> no listvar} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert end a b c d + .l2 configure -listvar {} + .l2 get 0 end +} -cleanup { + destroy .l2 +} -result [list a b c d] +test listbox-4.18 {ConfigureListbox, no listvar -> bad listvar} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert end a b c d + set x "this is a \" bad list" + catch {.l2 configure -listvar x} result + list [.l2 get 0 end] [.l2 cget -listvar] $result +} -cleanup { + destroy .l2 +} -result [list [list a b c d] {} \ + "unmatched open quote in list: invalid -listvariable value"] +test listbox-4.19 {ConfigureListbox, no listvar -> bad non-existent listvar} -setup { + destroy .l2 +} -body { + unset -nocomplain ::foo + listbox .l2 -listvar foo + .l2 insert end a b c d + catch {.l2 configure -listvar ::zoo::bar::foo} result + list [.l2 get 0 end] [.l2 cget -listvar] $foo $result +} -cleanup { + destroy .l2 +} -result [list [list a b c d] foo [list a b c d] \ + {can't set "::zoo::bar::foo": parent namespace doesn't exist}] + + +# No tests for DisplayListbox: I don't know how to test this procedure. + +test listbox-5.1 {ListboxComputeGeometry procedure} -constraints { + fonts +} -setup { + destroy .l +} -body { + listbox .l -font $fixed -width 15 -height 20 + pack .l + list [winfo reqwidth .l] [winfo reqheight .l] +} -result {115 328} +test listbox-5.2 {ListboxComputeGeometry procedure} -constraints { + fonts +} -setup { + destroy .l +} -body { + listbox .l -font $fixed -width 0 -height 10 + pack .l + update + list [winfo reqwidth .l] [winfo reqheight .l] +} -result {17 168} +test listbox-5.3 {ListboxComputeGeometry procedure} -constraints { + fonts +} -setup { + destroy .l +} -body { + listbox .l -font $fixed -width 0 -height 10 -bd 3 + .l insert 0 Short "Really much longer" Longer + pack .l + update + list [winfo reqwidth .l] [winfo reqheight .l] +} -result {138 170} +test listbox-5.4 {ListboxComputeGeometry procedure} -constraints { + fonts +} -setup { + destroy .l +} -body { + listbox .l -font $fixed -width 10 -height 0 + pack .l + update + list [winfo reqwidth .l] [winfo reqheight .l] +} -result {80 24} +test listbox-5.5 {ListboxComputeGeometry procedure} -constraints { + fonts +} -setup { + destroy .l +} -body { + listbox .l -font $fixed -width 10 -height 0 -highlightthickness 0 + .l insert 0 Short "Really much longer" Longer + pack .l + update + list [winfo reqwidth .l] [winfo reqheight .l] +} -result {76 52} +test listbox-5.6 {ListboxComputeGeometry procedure} -setup { + destroy .l +} -body { + # If "0" in selected font had 0 width, caused divide-by-zero error. + + pack [listbox .l -font {{open look glyph}}] + update +} -cleanup { + destroy .l +} -result {} + + +# Listbox used in 6.*, 7.* tests +destroy .l +listbox .l -height 2 -xscrollcommand "record x" -yscrollcommand "record y" +pack .l +update +test listbox-6.1 {InsertEls procedure} -body { + .l delete 0 end + .l insert end a b c d + .l insert 5 x y z + .l insert 2 A + .l insert 0 q r s + .l get 0 end +} -result {q r s a b A c d x y z} +test listbox-6.2 {InsertEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l selection anchor 2 + .l insert 2 A B + .l index anchor +} -result {4} +test listbox-6.3 {InsertEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l selection anchor 2 + .l insert 3 A B + .l index anchor +} -result {2} +test listbox-6.4 {InsertEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l yview 3 + update + .l insert 2 A B + .l index @0,0 +} -result {5} +test listbox-6.5 {InsertEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l yview 3 + update + .l insert 3 A B + .l index @0,0 +} -result {3} +test listbox-6.6 {InsertEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l activate 5 + .l insert 5 A B + .l index active +} -result {7} +test listbox-6.7 {InsertEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l activate 5 + .l insert 6 A B + .l index active +} -result {5} +test listbox-6.8 {InsertEls procedure} -body { + .l delete 0 end + .l insert 0 a b c + .l index active +} -result {2} +test listbox-6.9 {InsertEls procedure} -body { + .l delete 0 end + .l insert 0 + .l index active +} -result {0} +test listbox-6.10 {InsertEls procedure} -body { + .l delete 0 end + .l insert 0 a b "two words" c d e f g h i j + update + set log {} + .l insert 0 word + update + set log +} -result {{y 0 0.166667}} +test listbox-6.11 {InsertEls procedure} -body { + .l delete 0 end + .l insert 0 a b "two words" c d e f g h i j + update + set log {} + .l insert 0 "much longer entry" + update + set log +} -result {{y 0 0.166667} {x 0 1}} +test listbox-6.12 {InsertEls procedure} -constraints { + fonts +} -setup { + destroy .l2 +} -body { + listbox .l2 -width 0 -height 0 + pack .l2 -side top + .l2 insert 0 a b "two words" c d + set x {} + lappend x [winfo reqwidth .l2] [winfo reqheight .l2] + .l2 insert 0 "much longer entry" + lappend x [winfo reqwidth .l2] [winfo reqheight .l2] +} -cleanup { + destroy .l2 +} -result {80 93 122 110} +test listbox-6.13 {InsertEls procedure, check -listvar update} -setup { + destroy .l2 +} -body { + set x [list a b c d] + listbox .l2 -listvar x + .l2 insert 0 1 2 3 4 + set x +} -cleanup { + destroy .l2 +} -result [list 1 2 3 4 a b c d] +test listbox-6.14 {InsertEls procedure, check selection update} -setup { + destroy .l2 +} -body { + listbox .l2 + .l2 insert 0 0 1 2 3 4 + .l2 selection set 2 4 + .l2 insert 0 a + .l2 curselection +} -cleanup { + destroy .l2 +} -result [list 3 4 5] +test listbox-6.15 {InsertEls procedure, lost namespaced listvar} -body { + destroy .l2 + namespace eval test { variable foo {a b} } + listbox .l2 -listvar ::test::foo + namespace delete test + .l2 insert end c d + .l2 delete end + .l2 insert end e f + catch {set ::test::foo} result + list [.l2 get 0 end] [.l2 cget -listvar] $result +} -cleanup { + destroy .l2 +} -result [list [list a b c e f] ::test::foo \ + {can't read "::test::foo": no such variable}] + + +test listbox-7.1 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l selection set 1 6 + .l delete 4 3 + list [.l size] [selection get] +} -result {10 {b +c +d +e +f +g}} +test listbox-7.2 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l selection set 3 6 + .l delete 4 4 + list [.l size] [.l get 4] [.l curselection] +} -result {9 f {3 4 5}} +test listbox-7.3 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l delete 0 3 + list [.l size] [.l get 0] [.l get 1] +} -result {6 e f} +test listbox-7.4 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l delete 8 1000 + list [.l size] [.l get 7] +} -result {8 h} +test listbox-7.5 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l selection anchor 2 + .l delete 0 1 + .l index anchor +} -result {0} +test listbox-7.6 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l selection anchor 2 + .l delete 2 + .l index anchor +} -result {2} +test listbox-7.7 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l selection anchor 4 + .l delete 2 5 + .l index anchor +} -result {2} +test listbox-7.8 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l selection anchor 3 + .l delete 4 5 + .l index anchor +} -result {3} +test listbox-7.9 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l yview 3 + update + .l delete 1 2 + .l index @0,0 +} -result {1} +test listbox-7.10 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l yview 3 + update + .l delete 3 4 + .l index @0,0 +} -result {3} +test listbox-7.11 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l yview 3 + update + .l delete 4 6 + .l index @0,0 +} -result {3} +test listbox-7.12 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l yview 3 + update + .l delete 3 end + .l index @0,0 +} -result {1} +test listbox-7.13 {DeleteEls procedure, updating view with partial last line} -body { + mkPartial + .partial.l yview 8 + update + .partial.l delete 10 13 + .partial.l index @0,0 +} -result {7} +test listbox-7.14 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l activate 6 + .l delete 3 4 + .l index active +} -result {4} +test listbox-7.15 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l activate 6 + .l delete 5 7 + .l index active +} -result {5} +test listbox-7.16 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l activate 6 + .l delete 5 end + .l index active +} -result {4} +test listbox-7.17 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j + .l activate 6 + .l delete 0 end + .l index active +} -result {0} +test listbox-7.18 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c "two words" d e f g h i j + update + set log {} + .l delete 4 6 + update + set log +} -result {{y 0 0.25}} +test listbox-7.19 {DeleteEls procedure} -body { + .l delete 0 end + .l insert 0 a b c "two words" d e f g h i j + update + set log {} + .l delete 3 + update + set log +} -result {{y 0 0.2} {x 0 1}} +test listbox-7.20 {DeleteEls procedure} -constraints { + fonts +} -setup { + destroy .l2 +} -body { + listbox .l2 -width 0 -height 0 + pack .l2 -side top + .l2 insert 0 a b "two words" c d e f g + set x {} + lappend x [winfo reqwidth .l2] [winfo reqheight .l2] + .l2 delete 2 4 + lappend x [winfo reqwidth .l2] [winfo reqheight .l2] +} -result {80 144 17 93} +test listbox-7.21 {DeleteEls procedure, check -listvar update} -setup { + destroy .l2 +} -body { + set x [list a b c d] + listbox .l2 -listvar x + .l2 delete 0 1 + set x +} -result [list c d] + + +test listbox-8.1 {ListboxEventProc procedure} -constraints { + fonts +} -setup { + destroy .l +} -body { + listbox .l -setgrid 1 + pack .l + update + set x [getsize .] + destroy .l + list $x [getsize .] [winfo exists .l] [info command .l] +} -cleanup { + destroy .l +} -result {20x10 150x178 0 {}} +resetGridInfo +test listbox-8.2 {ListboxEventProc procedure} -constraints { + fonts +} -setup { + destroy .l +} -body { + listbox .l -height 5 -width 10 + .l insert 0 a b c "A string that is very very long" d e f g h i j k + pack .l + update + place .l -width 50 -height 80 + update + list [format {%.6g %.6g} {*}[.l xview]] [format {%.6g %.6g} {*}[.l yview]] +} -cleanup { + destroy .l +} -result {{0 0.222222} {0 0.333333}} +test listbox-8.3 {ListboxEventProc procedure} -setup { + deleteWindows +} -body { + listbox .l1 -bg #543210 + rename .l1 .l2 + set x {} + lappend x [winfo children .] + lappend x [.l2 cget -bg] + destroy .l1 + lappend x [info command .l*] [winfo children .] +} -cleanup { + deleteWindows +} -result {.l1 #543210 {} {}} + + +test listbox-9.1 {ListboxCmdDeletedProc procedure} -setup { + deleteWindows +} -body { + listbox .l1 + rename .l1 {} + list [info command .l*] [winfo children .] +} -cleanup { + deleteWindows +} -result {{} {}} +test listbox-9.2 {ListboxCmdDeletedProc procedure, disabling -setgrid} -constraints { + fonts +} -setup { + destroy .top +} -body { + toplevel .top + wm geom .top +0+0 + listbox .top.l -setgrid 1 -width 20 -height 10 + pack .top.l + update + set x [getsize .top] + rename .top.l {} + update + lappend x [getsize .top] +} -cleanup { + destroy .top +} -result {20x10 150x178} + + +# Listbox used in 10.* tests +destroy .l +test listbox-10.1 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + .l activate 3 + update + list [.l activate 3; .l index active] [.l activate 6; .l index active] +} -cleanup { + destroy .l +} -result {3 6} +test listbox-10.2 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + .l selection anchor 2 + update + .l index anchor +} -cleanup { + destroy .l +} -result 2 +test listbox-10.3 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + .l insert end A B C D E + .l selection anchor end + update + .l delete 12 end + list [.l index anchor] [.l index end] +} -cleanup { + destroy .l +} -result {12 12} +test listbox-10.4 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index a +} -cleanup { + destroy .l +} -returnCodes error -result {bad listbox index "a": must be active, anchor, end, @x,y, or a number} +test listbox-10.5 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index end +} -cleanup { + destroy .l +} -result {12} +test listbox-10.6 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l get end +} -cleanup { + destroy .l +} -result {el11} +test listbox-10.7 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + .l delete 0 end + update + .l index end +} -cleanup { + destroy .l +} -result 0 +test listbox-10.8 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index @ +} -cleanup { + destroy .l +} -returnCodes error -result {bad listbox index "@": must be active, anchor, end, @x,y, or a number} +test listbox-10.9 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index @foo +} -cleanup { + destroy .l +} -returnCodes error -result {bad listbox index "@foo": must be active, anchor, end, @x,y, or a number} +test listbox-10.10 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index @1x3 +} -cleanup { + destroy .l +} -returnCodes error -result {bad listbox index "@1x3": must be active, anchor, end, @x,y, or a number} +test listbox-10.11 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index @1, +} -cleanup { + destroy .l +} -returnCodes error -result {bad listbox index "@1,": must be active, anchor, end, @x,y, or a number} +test listbox-10.12 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index @1,foo +} -cleanup { + destroy .l +} -returnCodes error -result {bad listbox index "@1,foo": must be active, anchor, end, @x,y, or a number} +test listbox-10.13 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index @1,2x +} -cleanup { + destroy .l +} -returnCodes error -result {bad listbox index "@1,2x": must be active, anchor, end, @x,y, or a number} +test listbox-10.14 {GetListboxIndex procedure} -constraints { + fonts +} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + list [.l index @5,57] [.l index @5,58] +} -cleanup { + .l delete 0 end +} -cleanup { + destroy .l +} -result {3 3} +test listbox-10.15 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index 1xy +} -cleanup { + destroy .l +} -returnCodes error -result {bad listbox index "1xy": must be active, anchor, end, @x,y, or a number} +test listbox-10.16 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index 3 +} -cleanup { + destroy .l +} -result {3} +test listbox-10.17 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index 20 +} -cleanup { + destroy .l +} -result {20} +test listbox-10.18 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l get 20 +} -cleanup { + destroy .l +} -result {} +test listbox-10.19 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + update + .l index -2 +} -cleanup { + destroy .l +} -result -2 +test listbox-10.20 {GetListboxIndex procedure} -setup { + destroy .l +} -body { + pack [listbox .l] + .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 + .l delete 0 end + update + .l index 1 +} -cleanup { + destroy .l +} -result 1 + + +test listbox-11.1 {ChangeListboxView procedure, boundary conditions for index} -setup { + destroy .l +} -body { + listbox .l -height 5 + pack .l + .l insert 0 a b c d e f g h i j + .l yview 3 + update + set x [.l index @0,0] + .l yview -1 + update + lappend x [.l index @0,0] +} -cleanup { + destroy .l +} -result {3 0} +test listbox-11.2 {ChangeListboxView procedure, boundary conditions for index} -setup { + destroy .l +} -body { + listbox .l -height 5 + pack .l + .l insert 0 a b c d e f g h i j + .l yview 3 + update + set x [.l index @0,0] + .l yview 20 + update + lappend x [.l index @0,0] +} -cleanup { + destroy .l +} -result {3 5} +test listbox-11.3 {ChangeListboxView procedure} -setup { + destroy .l +} -body { + listbox .l -height 5 -yscrollcommand "record y" + pack .l + .l insert 0 a b c d e f g h i j + update + set log {} + .l yview 2 + update + list [format {%.6g %.6g} {*}[.l yview]] $log +} -cleanup { + destroy .l +} -result {{0.2 0.7} {{y 0.2 0.7}}} +test listbox-11.4 {ChangeListboxView procedure} -setup { + destroy .l +} -body { + listbox .l -height 5 -yscrollcommand "record y" + pack .l + .l insert 0 a b c d e f g h i j + update + set log {} + .l yview 8 + update + list [format {%.6g %.6g} {*}[.l yview]] $log +} -cleanup { + destroy .l +} -result {{0.5 1} {{y 0.5 1}}} +test listbox-11.5 {ChangeListboxView procedure} -setup { + destroy .l +} -body { + listbox .l -height 5 -yscrollcommand "record y" + pack .l + .l insert 0 a b c d e f g h i j + .l yview 3 + update + set log {} + .l yview 3 + update + list [format {%.6g %.6g} {*}[.l yview]] $log +} -cleanup { + destroy .l +} -result {{0.3 0.8} {}} +test listbox-11.6 {ChangeListboxView procedure, partial last line} -body { + mkPartial + .partial.l yview 13 + .partial.l index @0,0 +} -cleanup { + destroy .l +} -result {11} + + +# Listbox used in 12.* tests +destroy .l +listbox .l -font $fixed -xscrollcommand "record x" -width 10 +.l insert 0 0123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789 +pack .l +update +test listbox-12.1 {ChangeListboxOffset procedure} -constraints { + fonts +} -body { + set log {} + .l xview 99 + update + list [format {%.6g %.6g} {*}[.l xview]] $log +} -result {{0.9 1} {{x 0.9 1}}} +test listbox-12.2 {ChangeListboxOffset procedure} -constraints { + fonts +} -body { + set log {} + .l xview 99 + .l xview moveto -.25 + update + list [format {%.6g %.6g} {*}[.l xview]] $log +} -result {{0 0.1} {{x 0 0.1}}} +test listbox-12.3 {ChangeListboxOffset procedure} -constraints { + fonts +} -body { + .l xview 10 + update + set log {} + .l xview 10 + update + list [format {%.6g %.6g} {*}[.l xview]] $log +} -result {{0.1 0.2} {}} + + +# Listbox used in 13.* tests +destroy .l +listbox .l -font $fixed -width 10 -height 5 +pack .l +.l insert 0 a bb c d e f g h i j k l m n o p q r s +.l insert 0 0123456789a123456789b123456789c123456789d123456789 +update +set width [expr [lindex [.l bbox 2] 2] - [lindex [.l bbox 1] 2]] +set height [expr [lindex [.l bbox 2] 1] - [lindex [.l bbox 1] 1]] +test listbox-13.1 {ListboxScanTo procedure} -constraints { + fonts +} -body { + .l yview 0 + .l xview 0 + .l scan mark 10 20 + .l scan dragto [expr 10-$width] [expr 20-$height] + update + list [format {%.6g %.6g} {*}[.l xview]] [format {%.6g %.6g} {*}[.l yview]] +} -result {{0.2 0.4} {0.5 0.75}} +test listbox-13.2 {ListboxScanTo procedure} -constraints { + fonts +} -body { + .l yview 5 + .l xview 10 + .l scan mark 10 20 + .l scan dragto 20 40 + update + set x [list [format {%.6g %.6g} {*}[.l xview]] [format {%.6g %.6g} {*}[.l yview]]] + .l scan dragto [expr 20-$width] [expr 40-$height] + update + lappend x [format {%.6g %.6g} {*}[.l xview]] [format {%.6g %.6g} {*}[.l yview]] +} -result {{0 0.2} {0 0.25} {0.2 0.4} {0.5 0.75}} +test listbox-13.3 {ListboxScanTo procedure} -constraints { + fonts +} -body { + .l yview moveto 1.0 + .l xview moveto 1.0 + .l scan mark 10 20 + .l scan dragto 5 10 + update + set x [list [format {%.6g %.6g} {*}[.l xview]] [format {%.6g %.6g} {*}[.l yview]]] + .l scan dragto [expr 5+$width] [expr 10+$height] + update + lappend x [format {%.6g %.6g} {*}[.l xview]] [format {%.6g %.6g} {*}[.l yview]] +} -result {{0.8 1} {0.75 1} {0.6 0.8} {0.25 0.5}} + + +test listbox-14.1 {NearestListboxElement procedure, partial last line} -body { + mkPartial + .partial.l nearest [winfo height .partial.l] +} -result {4} +# Listbox used in 14.* tests +destroy .l +listbox .l -font $fixed -width 20 -height 10 +.l insert 0 a b c d e f g h i j k l m n o p q r s t +.l yview 4 +pack .l +update +test listbox-14.2 {NearestListboxElement procedure} -constraints { + fonts +} -body { + .l index @50,0 +} -result {4} +test listbox-14.3 {NearestListboxElement procedure} -constraints { + fonts +} -body { + list [.l index @50,35] [.l index @50,36] +} -result {5 6} +test listbox-14.4 {NearestListboxElement procedure} -constraints { + fonts +} -body { + .l index @50,200 +} -result {13} + + +# Listbox used in 15.* 16.* and 17.* tests +destroy .l +listbox .l -font $fixed -width 20 -height 10 +pack .l +update +test listbox-15.1 {ListboxSelect procedure} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j k l m n o p + .l select set 2 4 + .l select set 7 12 + .l select clear 4 7 + .l curselection +} -result {2 3 8 9 10 11 12} +test listbox-15.2 {ListboxSelect procedure} -setup { + destroy .e +} -body { + .l delete 0 end + .l insert 0 a b c d e f g h i j k l m n o p + entry .e + .e insert 0 "This is some text" + .e select from 0 + .e select to 7 + .l selection clear 2 4 + set x [selection own] + .l selection set 3 + list $x [selection own] [selection get] +} -cleanup { + destroy .e +} -result {.e .l d} +test listbox-15.3 {ListboxSelect procedure} -body { + .l delete 0 end + .l selection clear 0 end + .l select set 0 end + .l curselection +} -result {} +test listbox-15.4 {ListboxSelect procedure, boundary conditions for indices} -body { + .l delete 0 end + .l insert 0 a b c d e f + .l select clear 0 end + .l select set -2 -1 + .l curselection +} -result {} +test listbox-15.5 {ListboxSelect procedure, boundary conditions for indices} -body { + .l delete 0 end + .l insert 0 a b c d e f + .l select clear 0 end + .l select set -1 3 + .l curselection +} -result {0 1 2 3} +test listbox-15.6 {ListboxSelect procedure, boundary conditions for indices} -body { + .l delete 0 end + .l insert 0 a b c d e f + .l select clear 0 end + .l select set 2 4 + .l curselection +} -result {2 3 4} +test listbox-15.7 {ListboxSelect procedure, boundary conditions for indices} -body { + .l delete 0 end + .l insert 0 a b c d e f + .l select clear 0 end + .l select set 4 end + .l curselection +} -result {4 5} +test listbox-15.8 {ListboxSelect procedure, boundary conditions for indices} -body { + .l delete 0 end + .l insert 0 a b c d e f + .l select clear 0 end + .l select set 4 30 + .l curselection +} -result {4 5} +test listbox-15.9 {ListboxSelect procedure, boundary conditions for indices} -body { + .l delete 0 end + .l insert 0 a b c d e f + .l select clear 0 end + .l select set end 30 + .l curselection +} -result {5} +test listbox-15.10 {ListboxSelect procedure, boundary conditions for indices} -body { + .l delete 0 end + .l insert 0 a b c d e f + .l select clear 0 end + .l select set 20 25 + .l curselection +} -result {} + + +test listbox-16.1 {ListboxFetchSelection procedure} -body { + .l delete 0 end + .l insert 0 a b c "two words" e f g h i \\ k l m n o p + .l selection set 2 4 + .l selection set 9 + .l selection set 11 12 + selection get +} -result "c\ntwo words\ne\n\\\nl\nm" +test listbox-16.2 {ListboxFetchSelection procedure} -body { + .l delete 0 end + .l insert 0 a b c "two words" e f g h i \\ k l m n o p + .l selection set 3 + selection get +} -result "two words" +test listbox-16.3 {ListboxFetchSelection procedure, retrieve in several parts} -body { + set long "This is quite a long string\n" + append long $long $long $long $long + append long $long $long $long $long + append long $long $long + .l delete 0 end + .l insert 0 1$long 2$long 3$long 4$long 5$long + .l selection set 0 end + set sel [selection get] + string compare 1$long\n2$long\n3$long\n4$long\n5$long $sel +} -cleanup { + catch {unset long sel} +} -result {0} + + +test listbox-17.1 {ListboxLostSelection procedure} -setup { + destroy .e +} -body { + .l delete 0 end + .l insert 0 a b c d e + .l select set 0 end + entry .e + .e insert 0 "This is some text" + .e select from 0 + .e select to 5 + .l curselection +} -cleanup { + destroy .e +} -result {} +test listbox-17.2 {ListboxLostSelection procedure} -setup { + destroy .e +} -body { + .l delete 0 end + .l insert 0 a b c d e + .l select set 0 end + .l configure -exportselection 0 + entry .e + .e insert 0 "This is some text" + .e select from 0 + .e select to 5 + .l curselection +} -cleanup { + destroy .e +} -result {0 1 2 3 4} + + +# Listbox used in 18.* tests +destroy .l +listbox .l -font $fixed -width 10 -height 5 +pack .l +update +test listbox-18.1 {ListboxUpdateVScrollbar procedure} -body { + .l configure -yscrollcommand "record y" + set log {} + .l insert 0 a b c + update + .l insert end d e f g h + update + .l delete 0 end + update + set log +} -result {{y 0 1} {y 0 0.625} {y 0 1}} +test listbox-18.2 {ListboxUpdateVScrollbar procedure, partial last line} -body { + mkPartial + .partial.l configure -yscrollcommand "record y" + set log {} + .partial.l yview 3 + update + set log +} -result {{y 0.2 0.466667}} +test listbox-18.3 {ListboxUpdateVScrollbar procedure} -body { + proc bgerror args { + global x errorInfo + set x [list $args $errorInfo] + } + .l configure -yscrollcommand gorp + .l insert 0 foo + update + set x +} -cleanup { + rename bgerror {} +} -result {{{invalid command name "gorp"}} {invalid command name "gorp" + while executing +"gorp 0.0 1.0" + (vertical scrolling command executed by listbox)}} + + +# Listbox used in 19.* tests +destroy .l +listbox .l -font $fixed -width 10 -height 5 +pack .l +update +test listbox-19.1 {ListboxUpdateVScrollbar procedure} -constraints { + fonts +} -body { + .l configure -xscrollcommand "record x" + set log {} + .l insert 0 abc + update + .l insert 0 "This is a much longer string..." + update + .l delete 0 end + update + set log +} -result {{x 0 1} {x 0 0.322581} {x 0 1}} +test listbox-19.2 {ListboxUpdateVScrollbar procedure} -body { + proc bgerror args { + global x errorInfo + set x [list $args $errorInfo] + } + .l configure -xscrollcommand bogus + .l insert 0 foo + update + set x +} -result {{{invalid command name "bogus"}} {invalid command name "bogus" + while executing +"bogus 0.0 1.0" + (horizontal scrolling command executed by listbox)}} + + +test listbox-20.1 {listbox vs hidden commands} -setup { + deleteWindows +} -body { + set l [interp hidden] + listbox .l + interp hide {} .l + destroy .l + set res1 [list [winfo children .] [interp hidden]] + set res2 [list {} $l] + expr {$res1 eq $res2} +} -result 1 + + +# tests for ListboxListVarProc +test listbox-21.1 {ListboxListVarProc} -setup { + destroy .l +} -body { + catch {unset x} + listbox .l -listvar x + set x [list a b c d] + .l get 0 end +} -cleanup { + destroy .l +} -result [list a b c d] +test listbox-21.2 {ListboxListVarProc} -setup { + destroy .l +} -body { + set x [list a b c d] + listbox .l -listvar x + unset x + set x +} -cleanup { + destroy .l +} -result [list a b c d] +test listbox-21.3 {ListboxListVarProc} -setup { + destroy .l +} -body { + set x [list a b c d] + listbox .l -listvar x + .l configure -listvar {} + unset x + info exists x +} -cleanup { + destroy .l +} -result 0 +test listbox-21.4 {ListboxListVarProc} -setup { + destroy .l +} -body { + set x [list a b c d] + listbox .l -listvar x + lappend x e f g + .l size +} -cleanup { + destroy .l +} -result 7 +test listbox-21.5 {ListboxListVarProc, test selection after listvar mod} -setup { + destroy .l +} -body { + set x [list a b c d e f g] + listbox .l -listvar x + .l selection set end + set x [list a b c d] + set x [list 0 1 2 3 4 5 6] + .l curselection +} -cleanup { + destroy .l +} -result {} +test listbox-21.6 {ListboxListVarProc, test selection after listvar mod} -setup { + destroy .l +} -body { + set x [list a b c d] + listbox .l -listvar x + .l selection set 3 + lappend x e f g + .l curselection +} -cleanup { + destroy .l +} -result 3 +test listbox-21.7 {ListboxListVarProc, test selection after listvar mod} -setup { + destroy .l +} -body { + set x [list a b c d] + listbox .l -listvar x + .l selection set 0 + set x [linsert $x 0 1 2 3 4] + .l curselection +} -cleanup { + destroy .l +} -result 0 +test listbox-21.8 {ListboxListVarProc, test selection after listvar mod} -setup { + destroy .l +} -body { + set x [list a b c d] + listbox .l -listvar x + .l selection set 2 + set x [list a b c] + .l curselection +} -cleanup { + destroy .l +} -result 2 +test listbox-21.9 {ListboxListVarProc, test hscrollbar after listvar mod} -setup { + destroy .l +} -body { + catch {unset x} + set log {} + listbox .l -font $fixed -width 10 -xscrollcommand "record x" -listvar x + pack .l + update + lappend x "0000000000" + update + lappend x "00000000000000000000" + update + set log +} -cleanup { + destroy .l +} -result [list {x 0 1} {x 0 1} {x 0 0.5}] +test listbox-21.10 {ListboxListVarProc, test hscrollbar after listvar mod} -setup { + destroy .l +} -body { + catch {unset x} + set log {} + listbox .l -font $fixed -width 10 -xscrollcommand "record x" -listvar x + pack .l + update + lappend x "0000000000" + update + lappend x "00000000000000000000" + update + set x [list "0000000000"] + update + set log +} -cleanup { + destroy .l +} -result [list {x 0 1} {x 0 1} {x 0 0.5} {x 0 1}] +test listbox-21.11 {ListboxListVarProc, bad list} -setup { + destroy .l +} -body { + catch {unset x} + listbox .l -listvar x + set x [list a b c d] + catch {set x "this is a \" bad list"} result + set result +} -cleanup { + destroy .l +} -result {can't set "x": invalid listvar value} +test listbox-21.12 {ListboxListVarProc, cleanup item attributes} -setup { + destroy .l +} -body { + set x [list a b c d e f g] + listbox .l -listvar x + .l itemconfigure end -fg red + set x [list a b c d] + set x [list 0 1 2 3 4 5 6] + .l itemcget end -fg +} -cleanup { + destroy .l +} -result {} +test listbox-21.12a {ListboxListVarProc, cleanup item attributes} -setup { + destroy .l +} -body { + set x [list a b c d e f g] + listbox .l -listvar x + .l itemconfigure end -fg red + set x [list a b c d] + set x [list 0 1 2 3 4 5 6] + .l itemcget end -fg +} -cleanup { + destroy .l +} -result {} +test listbox-21.13 {listbox item configurations and listvar based deletions} -setup { + destroy .l +} -body { + catch {unset x} + listbox .l -listvar x + .l insert end a b c + .l itemconfigure 1 -fg red + set x [list b c] + .l itemcget 1 -fg +} -cleanup { + destroy .l +} -result red +test listbox-21.14 {listbox item configurations and listvar based inserts} -setup { + destroy .l +} -body { + catch {unset x} + listbox .l -listvar x + .l insert end a b c + .l itemconfigure 0 -fg red + set x [list 1 2 3 4 a b c] + .l itemcget 0 -fg +} -cleanup { + destroy .l +} -result red +test listbox-21.15 {ListboxListVarProc, update vertical scrollbar} -setup { + destroy .l +} -body { + catch {unset x} + set log {} + listbox .l -listvar x -yscrollcommand "record y" -font fixed -height 3 + pack .l + update + lappend x a b c d e f + update + set log +} -cleanup { + destroy .l +} -result [list {y 0 1} {y 0 0.5}] +test listbox-21.16 {ListboxListVarProc, update vertical scrollbar} -setup { + destroy .l +} -body { + catch {unset x} + listbox .l -listvar x -height 3 + pack .l + update + set x [list 0 1 2 3 4 5] + .l yview scroll 3 units + update + set result {} + lappend result [format {%.6g %.6g} {*}[.l yview]] + set x [lreplace $x 3 3] + set x [lreplace $x 3 3] + set x [lreplace $x 3 3] + update + lappend result [format {%.6g %.6g} {*}[.l yview]] + set result +} -cleanup { + destroy .l +} -result [list {0.5 1} {0 1}] + + +# UpdateHScrollbar +test listbox-22.1 {UpdateHScrollbar} -setup { + destroy .l +} -body { + set log {} + listbox .l -font $fixed -width 10 -xscrollcommand "record x" + pack .l + update + .l insert end "0000000000" + update + .l insert end "00000000000000000000" + update + set log +} -cleanup { + destroy .l +} -result [list {x 0 1} {x 0 1} {x 0 0.5}] + + +# ConfigureListboxItem +test listbox-23.1 {ConfigureListboxItem} -setup { + destroy .l +} -body { + listbox .l + catch {.l itemconfigure 0} result + set result +} -cleanup { + destroy .l +} -result {item number "0" out of range} +test listbox-23.2 {ConfigureListboxItem} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c d + .l itemconfigure 0 +} -cleanup { + destroy .l +} -result [list {-background background Background {} {}} \ + {-bg -background} \ + {-fg -foreground} \ + {-foreground foreground Foreground {} {}} \ + {-selectbackground selectBackground Foreground {} {}} \ + {-selectforeground selectForeground Background {} {}}] +test listbox-23.3 {ConfigureListboxItem, itemco shortcut} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c d + .l itemco 0 -background +} -cleanup { + destroy .l +} -result {-background background Background {} {}} +test listbox-23.4 {ConfigureListboxItem, wrong num args} -setup { + destroy .l +} -body { + listbox .l + .l insert end a + catch {.l itemco} result + set result +} -cleanup { + destroy .l +} -result {wrong # args: should be ".l itemconfigure index ?-option? ?value? ?-option value ...?"} +test listbox-23.5 {ConfigureListboxItem, multiple calls} -setup { + destroy .l +} -body { + listbox .l + set i 0 + foreach color {red orange yellow green blue white violet} { + .l insert end $color + .l itemconfigure $i -bg $color + incr i + } + pack .l + update + list [.l itemcget 0 -bg] [.l itemcget 1 -bg] [.l itemcget 2 -bg] \ + [.l itemcget 3 -bg] [.l itemcget 4 -bg] [.l itemcget 5 -bg] \ + [.l itemcget 6 -bg] +} -cleanup { + destroy .l +} -result {red orange yellow green blue white violet} + +# Listbox used in 23.6 -23.17 tests +destroy .l +listbox .l +.l insert end a b c d +test listbox-23.6 {configuration options} -body { + .l itemconfigure 0 -background #ff0000 + list [lindex [.l itemconfigure 0 -background] 4] [.l itemcget 0 -background] +} -cleanup { + .l configure -background #ffffff +} -result {{#ff0000} #ff0000} +test listbox-23.7 {configuration options} -body { + .l configure -background non-existent +} -returnCodes error -result {unknown color name "non-existent"} +test listbox-23.8 {configuration options} -body { + .l itemconfigure 0 -bg #ff0000 + list [lindex [.l itemconfigure 0 -bg] 4] [.l itemcget 0 -bg] +} -cleanup { + .l configure -bg #ffffff +} -result {{#ff0000} #ff0000} +test listbox-23.9 {configuration options} -body { + .l configure -bg non-existent +} -returnCodes error -result {unknown color name "non-existent"} +test listbox-23.10 {configuration options} -body { + .l itemconfigure 0 -fg #110022 + list [lindex [.l itemconfigure 0 -fg] 4] [.l itemcget 0 -fg] +} -cleanup { + .l configure -fg #000000 +} -result {{#110022} #110022} +test listbox-23.11 {configuration options} -body { + .l configure -fg bogus +} -returnCodes error -result {unknown color name "bogus"} +test listbox-23.12 {configuration options} -body { + .l itemconfigure 0 -foreground #110022 + list [lindex [.l itemconfigure 0 -foreground] 4] [.l itemcget 0 -foreground] +} -cleanup { + .l configure -foreground #000000 +} -result {{#110022} #110022} +test listbox-23.13 {configuration options} -body { + .l configure -foreground bogus +} -returnCodes error -result {unknown color name "bogus"} +test listbox-23.14 {configuration options} -body { + .l itemconfigure 0 -selectbackground #110022 + list [lindex [.l itemconfigure 0 -selectbackground] 4] [.l itemcget 0 -selectbackground] +} -cleanup { + .l configure -selectbackground #c3c3c3 +} -result {{#110022} #110022} +test listbox-23.15 {configuration options} -body { + .l configure -selectbackground bogus +} -returnCodes error -result {unknown color name "bogus"} +test listbox-23.16 {configuration options} -body { + .l itemconfigure 0 -selectforeground #654321 + list [lindex [.l itemconfigure 0 -selectforeground] 4] [.l itemcget 0 -selectforeground] +} -cleanup { + .l configure -selectforeground #000000 +} -result {{#654321} #654321} +test listbox-23.17 {configuration options} -body { + .l configure -selectforeground bogus +} -returnCodes error -result {unknown color name "bogus"} + + +# ListboxWidgetObjCmd, itemcget +test listbox-24.1 {itemcget} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c d + .l itemcget 0 -fg +} -cleanup { + destroy .l +} -result {} +test listbox-24.2 {itemcget} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c d + .l itemconfigure 0 -fg red + .l itemcget 0 -fg +} -cleanup { + destroy .l +} -result red +test listbox-24.3 {itemcget} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c d + catch {.l itemcget 0} result + set result +} -cleanup { + destroy .l +} -result {wrong # args: should be ".l itemcget index option"} +test listbox-24.4 {itemcget, itemcg shortcut} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c d + catch {.l itemcg 0} result + set result +} -cleanup { + destroy .l +} -result {wrong # args: should be ".l itemcget index option"} + + +# General item configuration issues +test listbox-25.1 {listbox item configurations and widget based deletions} -setup { + destroy .l +} -body { + listbox .l + .l insert end a + .l itemconfigure 0 -fg red + .l delete 0 end + .l insert end a + .l itemcget 0 -fg +} -cleanup { + destroy .l +} -result {} +test listbox-25.2 {listbox item configurations and widget based inserts} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c + .l itemconfigure 0 -fg red + .l insert 0 1 2 3 4 + list [.l itemcget 0 -fg] [.l itemcget 4 -fg] +} -cleanup { + destroy .l +} -result {{} red} + + +# state issues +test listbox-26.1 {listbox disabled state disallows inserts} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c + .l configure -state disabled + .l insert end d e f + .l get 0 end +} -cleanup { + destroy .l +} -result [list a b c] +test listbox-26.2 {listbox disabled state disallows deletions} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c + .l configure -state disabled + .l delete 0 end + .l get 0 end +} -cleanup { + destroy .l +} -result [list a b c] +test listbox-26.3 {listbox disabled state disallows selection modification} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c + .l selection set 0 + .l selection set 2 + .l configure -state disabled + .l selection clear 0 end + .l selection set 1 + .l curselection +} -cleanup { + destroy .l +} -result [list 0 2] +test listbox-26.4 {listbox disabled state disallows anchor modification} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c + .l selection anchor 0 + .l configure -state disabled + .l selection anchor 2 + .l index anchor +} -cleanup { + destroy .l +} -result 0 +test listbox-26.5 {listbox disabled state disallows active modification} -setup { + destroy .l +} -body { + listbox .l + .l insert end a b c + .l activate 0 + .l configure -state disabled + .l activate 2 + .l index active +} -cleanup { + destroy .l +} -result 0 + + +test listbox-27.1 {widget deletion while active} -setup { + destroy .l +} -body { + pack [listbox .l] + update + .l configure -cursor xterm -xscrollcommand { destroy .l } + update idle + winfo exists .l +} -cleanup { + destroy .l +} -result 0 + + +test listbox-28.1 {listbox -activestyle} -setup { + destroy .l +} -body { + listbox .l -activ non + .l cget -activestyle +} -cleanup { + destroy .l +} -result none +test listbox-28.2 {listbox -activestyle} -constraints { + nonwin +} -setup { + destroy .l +} -body { + listbox .l + .l cget -activestyle +} -cleanup { + destroy .l +} -result dotbox +test listbox-28.3 {listbox -activestyle} -constraints { + win +} -setup { + destroy .l +} -body { + listbox .l + .l cget -activestyle +} -cleanup { + destroy .l +} -result underline +test listbox-28.4 {listbox -activestyle} -setup { + destroy .l +} -body { + listbox .l -activestyle und + .l cget -activestyle +} -cleanup { + destroy .l +} -result underline + + +test listbox-29.1 {listbox selection behavior, -state disabled} -setup { + destroy .l +} -body { + listbox .l + .l insert end 1 2 3 + .l selection set 2 + set out [.l selection includes 2] + .l configure -state disabled + # still return 1 when disabled, because 'selection get' will work, + # but selection cannot be changed (new behavior since 8.4) + .l selection set 3 + lappend out [.l selection includes 2] [.l curselection] +} -cleanup { + destroy .l +} -result {1 1 2} + +test listbox-30.1 {Bug 3607326} -setup { + destroy .l + unset -nocomplain a +} -body { + array set a {} + listbox .l -listvariable a +} -cleanup { + destroy .l + unset -nocomplain a +} -result * -match glob -returnCodes error + +test listbox-31.1 {<<ListboxSelect>> event} -setup { + destroy .l + unset -nocomplain res +} -body { + pack [listbox .l -state normal] + update + bind .l <<ListboxSelect>> {lappend res [%W curselection]} + .l insert end a b c + focus -force .l + event generate .l <1> -x 5 -y 5 ; # <<ListboxSelect>> fires + .l configure -state disabled + focus -force .l + event generate .l <Control-Home> ; # <<ListboxSelect>> does NOT fire + .l configure -state normal + focus -force .l + event generate .l <Control-End> ; # <<ListboxSelect>> fires + .l selection clear 0 end ; # <<ListboxSelect>> does NOT fire + .l selection set 1 1 ; # <<ListboxSelect>> does NOT fire + lappend res [.l curselection] +} -cleanup { + destroy .l + unset -nocomplain res +} -result {0 2 1} + +test listbox-31.2 {<<ListboxSelect>> event on lost selection} -setup { + destroy .l +} -body { + pack [listbox .l -exportselection true] + update + bind .l <<ListboxSelect>> {lappend res [list [selection own] [%W curselection]]} + .l insert end a b c + focus -force .l + event generate .l <1> -x 5 -y 5 ; # <<ListboxSelect>> fires + selection clear ; # <<ListboxSelect>> fires again + update + set res +} -cleanup { + destroy .l +} -result {{.l 0} {{} {}}} + +test listbox-32.1 {Bug [5d991b822e]} { + # Want this not to segfault, or write to variable with empty name + set var INIT + listbox .b -listvariable var + trace add variable var unset {apply {args { + .b configure -listvariable {} + }}} + pack .b + bind .b <Configure> {unset var} + update + destroy .b + info exists {} +} 0 +test listbox-32.2 {Bug [5d991b822e]} { + # Want this not to leak traces + set var INIT + listbox .b -listvariable var + trace add variable var unset {apply {args { + .b configure -listvariable new + }}} + pack .b + bind .b <Configure> {unset -nocomplain var} + update + destroy .b + unset new +} {} + +resetGridInfo +deleteWindows +option clear + +# cleanup +cleanupTests +return + + + + + |