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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test out the "listbox" command
  2. # of Tk.  It is organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1993-1994 The Regents of the University of California.
  5. # Copyright (c) 1994-1997 Sun Microsystems, Inc.
  6. # Copyright (c) 1998-1999 by Scriptics Corporation.
  7. # All rights reserved.
  8. #
  9. # RCS: @(#) $Id: listbox.test,v 1.21.2.2 2006/05/29 21:52:47 hobbs Exp $
  10. package require tcltest 2.1
  11. namespace import -force tcltest::configure
  12. namespace import -force tcltest::testsDirectory
  13. configure -testdir [file join [pwd] [file dirname [info script]]]
  14. configure -loadfile [file join [testsDirectory] constraints.tcl]
  15. tcltest::loadTestedCommands
  16. set fixed {Courier -12}
  17. proc record args {
  18.     global log
  19.     lappend log $args
  20. }
  21. proc getsize w {
  22.     regexp {(^[^+-]*)} [wm geometry $w] foo x
  23.     return $x
  24. }
  25. proc resetGridInfo {} {
  26.     # Some window managers, such as mwm, don't reset gridding information
  27.     # unless the window is withdrawn and re-mapped.  If this procedure
  28.     # isn't invoked, the window manager will stay in gridded mode, which
  29.     # can cause all sorts of problems.  The "wm positionfrom" command is
  30.     # needed so that the window manager doesn't ask the user to
  31.     # manually position the window when it is re-mapped.
  32.     wm withdraw .
  33.     wm positionfrom . user
  34.     wm deiconify .
  35. }
  36. # Procedure that creates a second listbox for checking things related
  37. # to partially visible lines.
  38. proc mkPartial {{w .partial}} {
  39.     catch {destroy $w}
  40.     toplevel $w
  41.     wm geometry $w +0+0
  42.     listbox $w.l -width 30 -height 5
  43.     pack $w.l -expand 1 -fill both
  44.     $w.l insert end one two three four five six seven eight nine ten 
  45.     eleven twelve thirteen fourteen fifteen
  46.     update
  47.     scan [wm geometry $w] "%dx%d" width height
  48.     wm geometry $w ${width}x[expr $height-3]
  49.     update
  50. }
  51. # Create entries in the option database to be sure that geometry options
  52. # like border width have predictable values.
  53. option add *Listbox.borderWidth 2
  54. option add *Listbox.highlightThickness 2
  55. option add *Listbox.font {Helvetica -12 bold}
  56. listbox .l
  57. pack .l
  58. update
  59. resetGridInfo
  60. set i 1
  61. foreach test {
  62.     {-activestyle under underline foo {bad activestyle "foo": must be dotbox, none, or underline}}
  63.     {-background #ff0000 #ff0000 non-existent
  64.     {unknown color name "non-existent"}}
  65.     {-bd 4 4 badValue {bad screen distance "badValue"}}
  66.     {-bg #ff0000 #ff0000 non-existent {unknown color name "non-existent"}}
  67.     {-borderwidth 1.3 1 badValue {bad screen distance "badValue"}}
  68.     {-cursor arrow arrow badValue {bad cursor spec "badValue"}}
  69.     {-disabledforeground #110022 #110022 bogus {unknown color name "bogus"}}
  70.     {-exportselection yes 1 xyzzy {expected boolean value but got "xyzzy"}}
  71.     {-fg #110022 #110022 bogus {unknown color name "bogus"}}
  72.     {-font {Helvetica 12} {Helvetica 12} {} {font "" doesn't exist}}
  73.     {-foreground #110022 #110022 bogus {unknown color name "bogus"}}
  74.     {-height 30 30 20p {expected integer but got "20p"}}
  75.     {-highlightbackground #112233 #112233 ugly {unknown color name "ugly"}}
  76.     {-highlightcolor #123456 #123456 bogus {unknown color name "bogus"}}
  77.     {-highlightthickness 6 6 bogus {bad screen distance "bogus"}}
  78.     {-highlightthickness -2 0 {} {}}
  79.     {-relief groove groove 1.5 {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken}}
  80.     {-selectbackground #110022 #110022 bogus {unknown color name "bogus"}}
  81.     {-selectborderwidth 1.3 1 badValue {bad screen distance "badValue"}}
  82.     {-selectforeground #654321 #654321 bogus {unknown color name "bogus"}}
  83.     {-selectmode string string {} {}}
  84.     {-setgrid false 0 lousy {expected boolean value but got "lousy"}}
  85.     {-state disabled disabled foo {bad state "foo": must be disabled or normal}}
  86.     {-takefocus "any string" "any string" {} {}}
  87.     {-width 45 45 3p {expected integer but got "3p"}}
  88.     {-xscrollcommand {Some command} {Some command} {} {}}
  89.     {-yscrollcommand {Another command} {Another command} {} {}}
  90.     {-listvar testVariable testVariable {} {}}
  91. } {
  92.     set name [lindex $test 0]
  93.     test listbox-1.$i {configuration options} {
  94. .l configure $name [lindex $test 1]
  95. list [lindex [.l configure $name] 4] [.l cget $name]
  96.     } [list [lindex $test 2] [lindex $test 2]]
  97.     incr i
  98.     if {[lindex $test 3] != ""} {
  99. test listbox-1.$i {configuration options} {
  100.     list [catch {.l configure $name [lindex $test 3]} msg] $msg
  101. } [list 1 [lindex $test 4]]
  102.     }
  103.     .l configure $name [lindex [.l configure $name] 3]
  104.     incr i
  105. }
  106. test listbox-2.1 {Tk_ListboxCmd procedure} {
  107.     list [catch {listbox} msg] $msg
  108. } {1 {wrong # args: should be "listbox pathName ?options?"}}
  109. test listbox-2.2 {Tk_ListboxCmd procedure} {
  110.     list [catch {listbox gorp} msg] $msg
  111. } {1 {bad window path name "gorp"}}
  112. test listbox-2.3 {Tk_ListboxCmd procedure} {
  113.     catch {destroy .l}
  114.     listbox .l
  115.     list [winfo exists .l] [winfo class .l] [info commands .l]
  116. } {1 Listbox .l}
  117. test listbox-2.4 {Tk_ListboxCmd procedure} {
  118.     catch {destroy .l}
  119.     list [catch {listbox .l -gorp foo} msg] $msg [winfo exists .l] 
  120.     [info commands .l]
  121. } {1 {unknown option "-gorp"} 0 {}}
  122. test listbox-2.5 {Tk_ListboxCmd procedure} {
  123.     catch {destroy .l}
  124.     listbox .l
  125. } {.l}
  126. catch {destroy .l}
  127. listbox .l -width 20 -height 5 -bd 4 -highlightthickness 1 -selectborderwidth 2
  128. pack .l
  129. .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11 el12 el13 el14 
  130. el15 el16 el17
  131. update
  132. test listbox-3.1 {ListboxWidgetCmd procedure} {
  133.     list [catch .l msg] $msg
  134. } {1 {wrong # args: should be ".l option ?arg arg ...?"}}
  135. test listbox-3.2 {ListboxWidgetCmd procedure, "activate" option} {
  136.     list [catch {.l activate} msg] $msg
  137. } {1 {wrong # args: should be ".l activate index"}}
  138. test listbox-3.3 {ListboxWidgetCmd procedure, "activate" option} {
  139.     list [catch {.l activate a b} msg] $msg
  140. } {1 {wrong # args: should be ".l activate index"}}
  141. test listbox-3.4 {ListboxWidgetCmd procedure, "activate" option} {
  142.     list [catch {.l activate fooey} msg] $msg
  143. } {1 {bad listbox index "fooey": must be active, anchor, end, @x,y, or a number}}
  144. test listbox-3.5 {ListboxWidgetCmd procedure, "activate" option} {
  145.     .l activate 3
  146.     .l index active
  147. } 3
  148. test listbox-3.6 {ListboxWidgetCmd procedure, "activate" option} {
  149.     .l activate -1
  150.     .l index active
  151. } {0}
  152. test listbox-3.7 {ListboxWidgetCmd procedure, "activate" option} {
  153.     .l activate 30
  154.     .l index active
  155. } {17}
  156. test listbox-3.8 {ListboxWidgetCmd procedure, "activate" option} {
  157.     .l activate end
  158.     .l index active
  159. } {17}
  160. test listbox-3.9 {ListboxWidgetCmd procedure, "bbox" option} {
  161.     list [catch {.l bbox} msg] $msg
  162. } {1 {wrong # args: should be ".l bbox index"}}
  163. test listbox-3.10 {ListboxWidgetCmd procedure, "bbox" option} {
  164.     list [catch {.l bbox a b} msg] $msg
  165. } {1 {wrong # args: should be ".l bbox index"}}
  166. test listbox-3.11 {ListboxWidgetCmd procedure, "bbox" option} {
  167.     list [catch {.l bbox fooey} msg] $msg
  168. } {1 {bad listbox index "fooey": must be active, anchor, end, @x,y, or a number}}
  169. test listbox-3.12 {ListboxWidgetCmd procedure, "bbox" option} {
  170.     .l yview 3
  171.     update
  172.     list [.l bbox 2] [.l bbox 8]
  173. } {{} {}}
  174. test listbox-3.13 {ListboxWidgetCmd procedure, "bbox" option} {
  175.     # Used to generate a core dump before a bug was fixed (the last
  176.     # element would be on-screen if it existed, but it doesn't exist).
  177.     listbox .l2
  178.     pack .l2 -side top
  179.     tkwait visibility .l2
  180.     set x [.l2 bbox 0]
  181.     destroy .l2
  182.     set x
  183. } {}
  184. test listbox-3.14 {ListboxWidgetCmd procedure, "bbox" option} {fonts} {
  185.     .l yview 3
  186.     update
  187.     list [.l bbox 3] [.l bbox 4]
  188. } {{7 7 17 14} {7 26 17 14}}
  189. test listbox-3.15 {ListboxWidgetCmd procedure, "bbox" option} {fonts} {
  190.     .l yview 0
  191.     update
  192.     list [.l bbox -1] [.l bbox 0]
  193. } {{} {7 7 17 14}}
  194. test listbox-3.16 {ListboxWidgetCmd procedure, "bbox" option} {fonts} {
  195.     .l yview end
  196.     update
  197.     list [.l bbox 17] [.l bbox end] [.l bbox 18]
  198. } {{7 83 24 14} {7 83 24 14} {}}
  199. test listbox-3.17 {ListboxWidgetCmd procedure, "bbox" option} {fonts} {
  200.     catch {destroy .t}
  201.     toplevel .t
  202.     wm geom .t +0+0
  203.     listbox .t.l -width 10 -height 5
  204.     .t.l insert 0 "Short" "Somewhat longer" "Really, quite a whole lot longer than can possibly fit on the screen" "Short"
  205.     pack .t.l
  206.     update
  207.     .t.l xview moveto .2
  208.     .t.l bbox 2
  209. } {-72 39 393 14}
  210. test listbox-3.18 {ListboxWidgetCmd procedure, "bbox" option, partial last line} {fonts} {
  211.     mkPartial
  212.     list [.partial.l bbox 3] [.partial.l bbox 4]
  213. } {{5 56 24 14} {5 73 23 14}}
  214. test listbox-3.19 {ListboxWidgetCmd procedure, "cget" option} {
  215.     list [catch {.l cget} msg] $msg
  216. } {1 {wrong # args: should be ".l cget option"}}
  217. test listbox-3.20 {ListboxWidgetCmd procedure, "cget" option} {
  218.     list [catch {.l cget a b} msg] $msg
  219. } {1 {wrong # args: should be ".l cget option"}}
  220. test listbox-3.21 {ListboxWidgetCmd procedure, "cget" option} {
  221.     list [catch {.l cget -gorp} msg] $msg
  222. } {1 {unknown option "-gorp"}}
  223. test listbox-3.22 {ListboxWidgetCmd procedure, "cget" option} {
  224.     .l cget -setgrid
  225. } {0}
  226. test listbox-3.23 {ListboxWidgetCmd procedure, "configure" option} {
  227.     llength [.l configure]
  228. } {27}
  229. test listbox-3.24 {ListboxWidgetCmd procedure, "configure" option} {
  230.     list [catch {.l configure -gorp} msg] $msg
  231. } {1 {unknown option "-gorp"}}
  232. test listbox-3.25 {ListboxWidgetCmd procedure, "configure" option} {
  233.     .l configure -setgrid
  234. } {-setgrid setGrid SetGrid 0 0}
  235. test listbox-3.26 {ListboxWidgetCmd procedure, "configure" option} {
  236.     list [catch {.l configure -gorp is_messy} msg] $msg
  237. } {1 {unknown option "-gorp"}}
  238. test listbox-3.27 {ListboxWidgetCmd procedure, "configure" option} {
  239.     set oldbd [.l cget -bd]
  240.     set oldht [.l cget -highlightthickness]
  241.     .l configure -bd 3 -highlightthickness 0
  242.     set x "[.l cget -bd] [.l cget -highlightthickness]"
  243.     .l configure -bd $oldbd -highlightthickness $oldht
  244.     set x
  245. } {3 0}
  246. test listbox-3.28 {ListboxWidgetCmd procedure, "curselection" option} {
  247.     list [catch {.l curselection a} msg] $msg
  248. } {1 {wrong # args: should be ".l curselection"}}
  249. test listbox-3.29 {ListboxWidgetCmd procedure, "curselection" option} {
  250.     .l selection clear 0 end
  251.     .l selection set 3 6
  252.     .l selection set 9
  253.     .l curselection
  254. } {3 4 5 6 9}
  255. test listbox-3.30 {ListboxWidgetCmd procedure, "delete" option} {
  256.     list [catch {.l delete} msg] $msg
  257. } {1 {wrong # args: should be ".l delete firstIndex ?lastIndex?"}}
  258. test listbox-3.31 {ListboxWidgetCmd procedure, "delete" option} {
  259.     list [catch {.l delete a b c} msg] $msg
  260. } {1 {wrong # args: should be ".l delete firstIndex ?lastIndex?"}}
  261. test listbox-3.32 {ListboxWidgetCmd procedure, "delete" option} {
  262.     list [catch {.l delete badIndex} msg] $msg
  263. } {1 {bad listbox index "badIndex": must be active, anchor, end, @x,y, or a number}}
  264. test listbox-3.33 {ListboxWidgetCmd procedure, "delete" option} {
  265.     list [catch {.l delete 2 123ab} msg] $msg
  266. } {1 {bad listbox index "123ab": must be active, anchor, end, @x,y, or a number}}
  267. test listbox-3.34 {ListboxWidgetCmd procedure, "delete" option} {
  268.     catch {destroy .l2}
  269.     listbox .l2
  270.     .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7
  271.     .l2 delete 3
  272.     list [.l2 get 2] [.l2 get 3] [.l2 index end]
  273. } {el2 el4 7}
  274. test listbox-3.35 {ListboxWidgetCmd procedure, "delete" option} {
  275.     catch {destroy .l2}
  276.     listbox .l2
  277.     .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7
  278.     .l2 delete 2 4
  279.     list [.l2 get 1] [.l2 get 2] [.l2 index end]
  280. } {el1 el5 5}
  281. test listbox-3.36 {ListboxWidgetCmd procedure, "delete" option} {
  282.     catch {destroy .l2}
  283.     listbox .l2
  284.     .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7
  285.     .l2 delete -3 2
  286.     .l2 get 0 end
  287. } {el3 el4 el5 el6 el7}
  288. test listbox-3.37 {ListboxWidgetCmd procedure, "delete" option} {
  289.     catch {destroy .l2}
  290.     listbox .l2
  291.     .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7
  292.     .l2 delete -3 -1
  293.     .l2 get 0 end
  294. } {el0 el1 el2 el3 el4 el5 el6 el7}
  295. test listbox-3.38 {ListboxWidgetCmd procedure, "delete" option} {
  296.     catch {destroy .l2}
  297.     listbox .l2
  298.     .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7
  299.     .l2 delete 2 end
  300.     .l2 get 0 end
  301. } {el0 el1}
  302. test listbox-3.39 {ListboxWidgetCmd procedure, "delete" option} {
  303.     catch {destroy .l2}
  304.     listbox .l2
  305.     .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7
  306.     .l2 delete 5 20
  307.     .l2 get 0 end
  308. } {el0 el1 el2 el3 el4}
  309. test listbox-3.40 {ListboxWidgetCmd procedure, "delete" option} {
  310.     catch {destroy .l2}
  311.     listbox .l2
  312.     .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7
  313.     .l2 delete end 20
  314.     .l2 get 0 end
  315. } {el0 el1 el2 el3 el4 el5 el6}
  316. test listbox-3.41 {ListboxWidgetCmd procedure, "delete" option} {
  317.     catch {destroy .l2}
  318.     listbox .l2
  319.     .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7
  320.     .l2 delete 8 20
  321.     .l2 get 0 end
  322. } {el0 el1 el2 el3 el4 el5 el6 el7}
  323. test listbox-3.42 {ListboxWidgetCmd procedure, "get" option} {
  324.     list [catch {.l get} msg] $msg
  325. } {1 {wrong # args: should be ".l get firstIndex ?lastIndex?"}}
  326. test listbox-3.43 {ListboxWidgetCmd procedure, "get" option} {
  327.     list [catch {.l get a b c} msg] $msg
  328. } {1 {wrong # args: should be ".l get firstIndex ?lastIndex?"}}
  329. test listbox-3.44 {ListboxWidgetCmd procedure, "get" option} {
  330.     list [catch {.l get 2.4} msg] $msg
  331. } {1 {bad listbox index "2.4": must be active, anchor, end, @x,y, or a number}}
  332. test listbox-3.45 {ListboxWidgetCmd procedure, "get" option} {
  333.     list [catch {.l get end bogus} msg] $msg
  334. } {1 {bad listbox index "bogus": must be active, anchor, end, @x,y, or a number}}
  335. test listbox-3.46 {ListboxWidgetCmd procedure, "get" option} {
  336.     catch {destroy .l2}
  337.     listbox .l2
  338.     .l2 insert 0 el0 el1 el2 el3 el4 el5 el6 el7
  339.     list [.l2 get 0] [.l2 get 3] [.l2 get end]
  340. } {el0 el3 el7}
  341. test listbox-3.47 {ListboxWidgetCmd procedure, "get" option} {
  342.     catch {destroy .l2}
  343.     listbox .l2
  344.     list [.l2 get 0] [.l2 get end]
  345. } {{} {}}
  346. test listbox-3.48 {ListboxWidgetCmd procedure, "get" option} {
  347.     catch {destroy .l2}
  348.     listbox .l2
  349.     .l2 insert 0 el0 el1 el2 "two words" el4 el5 el6 el7
  350.     .l2 get 3 end
  351. } {{two words} el4 el5 el6 el7}
  352. test listbox-3.49 {ListboxWidgetCmd procedure, "get" option} {
  353.     .l get -1
  354. } {}
  355. test listbox-3.50 {ListboxWidgetCmd procedure, "get" option} {
  356.     .l get -2 -1
  357. } {}
  358. test listbox-3.51 {ListboxWidgetCmd procedure, "get" option} {
  359.     .l get -2 3
  360. } {el0 el1 el2 el3}
  361. test listbox-3.52 {ListboxWidgetCmd procedure, "get" option} {
  362.     .l get 12 end
  363. } {el12 el13 el14 el15 el16 el17}
  364. test listbox-3.53 {ListboxWidgetCmd procedure, "get" option} {
  365.     .l get 12 20
  366. } {el12 el13 el14 el15 el16 el17}
  367. test listbox-3.54 {ListboxWidgetCmd procedure, "get" option} {
  368.     .l get end
  369. } {el17}
  370. test listbox-3.55 {ListboxWidgetCmd procedure, "get" option} {
  371.     .l get 30
  372. } {}
  373. test listbox-3.56 {ListboxWidgetCmd procedure, "get" option} {
  374.     .l get 30 35
  375. } {}
  376. test listbox-3.57 {ListboxWidgetCmd procedure, "index" option} {
  377.     list [catch {.l index} msg] $msg
  378. } {1 {wrong # args: should be ".l index index"}}
  379. test listbox-3.58 {ListboxWidgetCmd procedure, "index" option} {
  380.     list [catch {.l index a b} msg] $msg
  381. } {1 {wrong # args: should be ".l index index"}}
  382. test listbox-3.59 {ListboxWidgetCmd procedure, "index" option} {
  383.     list [catch {.l index @} msg] $msg
  384. } {1 {bad listbox index "@": must be active, anchor, end, @x,y, or a number}}
  385. test listbox-3.60 {ListboxWidgetCmd procedure, "index" option} {
  386.     .l index 2
  387. } 2
  388. test listbox-3.61 {ListboxWidgetCmd procedure, "index" option} {
  389.     .l index -1
  390. } -1
  391. test listbox-3.62 {ListboxWidgetCmd procedure, "index" option} {
  392.     .l index end
  393. } 18
  394. test listbox-3.63 {ListboxWidgetCmd procedure, "index" option} {
  395.     .l index 34
  396. } 34
  397. test listbox-3.64 {ListboxWidgetCmd procedure, "insert" option} {
  398.     list [catch {.l insert} msg] $msg
  399. } {1 {wrong # args: should be ".l insert index ?element element ...?"}}
  400. test listbox-3.65 {ListboxWidgetCmd procedure, "insert" option} {
  401.     list [catch {.l insert badIndex} msg] $msg
  402. } {1 {bad listbox index "badIndex": must be active, anchor, end, @x,y, or a number}}
  403. test listbox-3.66 {ListboxWidgetCmd procedure, "insert" option} {
  404.     catch {destroy .l2}
  405.     listbox .l2
  406.     .l2 insert end a b c d e
  407.     .l2 insert 3 x y z
  408.     .l2 get 0 end
  409. } {a b c x y z d e}
  410. test listbox-3.67 {ListboxWidgetCmd procedure, "insert" option} {
  411.     catch {destroy .l2}
  412.     listbox .l2
  413.     .l2 insert end a b c
  414.     .l2 insert -1 x
  415.     .l2 get 0 end
  416. } {x a b c}
  417. test listbox-3.68 {ListboxWidgetCmd procedure, "insert" option} {
  418.     catch {destroy .l2}
  419.     listbox .l2
  420.     .l2 insert end a b c
  421.     .l2 insert end x
  422.     .l2 get 0 end
  423. } {a b c x}
  424. test listbox-3.69 {ListboxWidgetCmd procedure, "insert" option} {
  425.     catch {destroy .l2}
  426.     listbox .l2
  427.     .l2 insert end a b c
  428.     .l2 insert 43 x
  429.     .l2 get 0 end
  430. } {a b c x}
  431. test listbox-3.70 {ListboxWidgetCmd procedure, "nearest" option} {
  432.     list [catch {.l nearest} msg] $msg
  433. } {1 {wrong # args: should be ".l nearest y"}}
  434. test listbox-3.71 {ListboxWidgetCmd procedure, "nearest" option} {
  435.     list [catch {.l nearest a b} msg] $msg
  436. } {1 {wrong # args: should be ".l nearest y"}}
  437. test listbox-3.72 {ListboxWidgetCmd procedure, "nearest" option} {
  438.     list [catch {.l nearest 20p} msg] $msg
  439. } {1 {expected integer but got "20p"}}
  440. test listbox-3.73 {ListboxWidgetCmd procedure, "nearest" option} {
  441.     .l yview 3
  442.     .l nearest 1000
  443. } {7}
  444. test listbox-3.74 {ListboxWidgetCmd procedure, "scan" option} {
  445.     list [catch {.l scan a b} msg] $msg
  446. } {1 {wrong # args: should be ".l scan mark|dragto x y"}}
  447. test listbox-3.75 {ListboxWidgetCmd procedure, "scan" option} {
  448.     list [catch {.l scan a b c d} msg] $msg
  449. } {1 {wrong # args: should be ".l scan mark|dragto x y"}}
  450. test listbox-3.76 {ListboxWidgetCmd procedure, "scan" option} {
  451.     list [catch {.l scan foo bogus 2} msg] $msg
  452. } {1 {expected integer but got "bogus"}}
  453. test listbox-3.77 {ListboxWidgetCmd procedure, "scan" option} {
  454.     list [catch {.l scan foo 2 2.3} msg] $msg
  455. } {1 {expected integer but got "2.3"}}
  456. test listbox-3.78 {ListboxWidgetCmd procedure, "scan" option} {fonts} {
  457.     catch {destroy .t}
  458.     toplevel .t
  459.     wm geom .t +0+0
  460.     listbox .t.l -width 10 -height 5
  461.     .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
  462.     pack .t.l
  463.     update
  464.     .t.l scan mark 100 140
  465.     .t.l scan dragto 90 137
  466.     update
  467.     list [.t.l xview] [.t.l yview]
  468. } {{0.249364 0.427481} {0.0714286 0.428571}}
  469. test listbox-3.79 {ListboxWidgetCmd procedure, "scan" option} {
  470.     list [catch {.l scan foo 2 4} msg] $msg
  471. } {1 {bad option "foo": must be mark or dragto}}
  472. test listbox-3.80 {ListboxWidgetCmd procedure, "see" option} {
  473.     list [catch {.l see} msg] $msg
  474. } {1 {wrong # args: should be ".l see index"}}
  475. test listbox-3.81 {ListboxWidgetCmd procedure, "see" option} {
  476.     list [catch {.l see a b} msg] $msg
  477. } {1 {wrong # args: should be ".l see index"}}
  478. test listbox-3.82 {ListboxWidgetCmd procedure, "see" option} {
  479.     list [catch {.l see gorp} msg] $msg
  480. } {1 {bad listbox index "gorp": must be active, anchor, end, @x,y, or a number}}
  481. test listbox-3.83 {ListboxWidgetCmd procedure, "see" option} {
  482.     .l yview 7
  483.     .l see 7
  484.     .l index @0,0
  485. } {7}
  486. test listbox-3.84 {ListboxWidgetCmd procedure, "see" option} {
  487.     .l yview 7
  488.     .l see 11
  489.     .l index @0,0
  490. } {7}
  491. test listbox-3.85 {ListboxWidgetCmd procedure, "see" option} {
  492.     .l yview 7
  493.     .l see 6
  494.     .l index @0,0
  495. } {6}
  496. test listbox-3.86 {ListboxWidgetCmd procedure, "see" option} {
  497.     .l yview 7
  498.     .l see 5
  499.     .l index @0,0
  500. } {3}
  501. test listbox-3.87 {ListboxWidgetCmd procedure, "see" option} {
  502.     .l yview 7
  503.     .l see 12
  504.     .l index @0,0
  505. } {8}
  506. test listbox-3.88 {ListboxWidgetCmd procedure, "see" option} {
  507.     .l yview 7
  508.     .l see 13
  509.     .l index @0,0
  510. } {11}
  511. test listbox-3.89 {ListboxWidgetCmd procedure, "see" option} {
  512.     .l yview 7
  513.     .l see -1
  514.     .l index @0,0
  515. } {0}
  516. test listbox-3.90 {ListboxWidgetCmd procedure, "see" option} {
  517.     .l yview 7
  518.     .l see end
  519.     .l index @0,0
  520. } {13}
  521. test listbox-3.91 {ListboxWidgetCmd procedure, "see" option} {
  522.     .l yview 7
  523.     .l see 322
  524.     .l index @0,0
  525. } {13}
  526. test listbox-3.92 {ListboxWidgetCmd procedure, "see" option, partial last line} {
  527.     mkPartial
  528.     .partial.l see 4
  529.     .partial.l index @0,0
  530. } {1}
  531. test listbox-3.93 {ListboxWidgetCmd procedure, "selection" option} {
  532.     list [catch {.l select a} msg] $msg
  533. } {1 {wrong # args: should be ".l selection option index ?index?"}}
  534. test listbox-3.94 {ListboxWidgetCmd procedure, "selection" option} {
  535.     list [catch {.l select a b c d} msg] $msg
  536. } {1 {wrong # args: should be ".l selection option index ?index?"}}
  537. test listbox-3.95 {ListboxWidgetCmd procedure, "selection" option} {
  538.     list [catch {.l selection a bogus} msg] $msg
  539. } {1 {bad listbox index "bogus": must be active, anchor, end, @x,y, or a number}}
  540. test listbox-3.96 {ListboxWidgetCmd procedure, "selection" option} {
  541.     list [catch {.l selection a 0 lousy} msg] $msg
  542. } {1 {bad listbox index "lousy": must be active, anchor, end, @x,y, or a number}}
  543. test listbox-3.97 {ListboxWidgetCmd procedure, "selection" option} {
  544.     list [catch {.l selection anchor 0 0} msg] $msg
  545. } {1 {wrong # args: should be ".l selection anchor index"}}
  546. test listbox-3.98 {ListboxWidgetCmd procedure, "selection" option} {
  547.     list [.l selection anchor 5; .l index anchor] 
  548.     [.l selection anchor 0; .l index anchor]
  549. } {5 0}
  550. test listbox-3.99 {ListboxWidgetCmd procedure, "selection" option} {
  551.     .l selection anchor -1
  552.     .l index anchor
  553. } {0}
  554. test listbox-3.100 {ListboxWidgetCmd procedure, "selection" option} {
  555.     .l selection anchor end
  556.     .l index anchor
  557. } {17}
  558. test listbox-3.101 {ListboxWidgetCmd procedure, "selection" option} {
  559.     .l selection anchor 44
  560.     .l index anchor
  561. } {17}
  562. test listbox-3.102 {ListboxWidgetCmd procedure, "selection" option} {
  563.     .l selection clear 0 end
  564.     .l selection set 2 8
  565.     .l selection clear 3 4
  566.     .l curselection
  567. } {2 5 6 7 8}
  568. test listbox-3.103 {ListboxWidgetCmd procedure, "selection" option} {
  569.     list [catch {.l selection includes 0 0} msg] $msg
  570. } {1 {wrong # args: should be ".l selection includes index"}}
  571. test listbox-3.104 {ListboxWidgetCmd procedure, "selection" option} {
  572.     .l selection clear 0 end
  573.     .l selection set 2 8
  574.     .l selection clear 4
  575.     list [.l selection includes 3] [.l selection includes 4] 
  576.     [.l selection includes 5]
  577. } {1 0 1}
  578. test listbox-3.105 {ListboxWidgetCmd procedure, "selection" option} {
  579.     .l selection set 0 end
  580.     .l selection includes -1
  581. } {0}
  582. test listbox-3.106 {ListboxWidgetCmd procedure, "selection" option} {
  583.     .l selection clear 0 end
  584.     .l selection set end
  585.     .l selection includes end
  586. } {1}
  587. test listbox-3.107 {ListboxWidgetCmd procedure, "selection" option} {
  588.     .l selection set 0 end
  589.     .l selection includes 44
  590. } {0}
  591. test listbox-3.108 {ListboxWidgetCmd procedure, "selection" option} {
  592.     catch {destroy .l2}
  593.     listbox .l2
  594.     .l2 selection includes 0
  595. } {0}
  596. test listbox-3.109 {ListboxWidgetCmd procedure, "selection" option} {
  597.     .l selection clear 0 end
  598.     .l selection set 2
  599.     .l selection set 5 7
  600.     .l curselection
  601. } {2 5 6 7}
  602. test listbox-3.110 {ListboxWidgetCmd procedure, "selection" option} {
  603.     .l selection set 5 7
  604.     .l curselection
  605. } {2 5 6 7}
  606. test listbox-3.111 {ListboxWidgetCmd procedure, "selection" option} {
  607.     list [catch {.l selection badOption 0 0} msg] $msg
  608. } {1 {bad option "badOption": must be anchor, clear, includes, or set}}
  609. test listbox-3.112 {ListboxWidgetCmd procedure, "size" option} {
  610.     list [catch {.l size a} msg] $msg
  611. } {1 {wrong # args: should be ".l size"}}
  612. test listbox-3.113 {ListboxWidgetCmd procedure, "size" option} {
  613.     .l size
  614. } {18}
  615. test listbox-3.114 {ListboxWidgetCmd procedure, "xview" option} {
  616.     catch {destroy .l2}
  617.     listbox .l2
  618.     update
  619.     .l2 xview
  620. } {0 1}
  621. test listbox-3.115 {ListboxWidgetCmd procedure, "xview" option} {
  622.     catch {destroy .l}
  623.     listbox .l -width 10 -height 5 -font $fixed
  624.     .l insert 0 a b c d e f g h i j k l m n o p q r s t
  625.     pack .l
  626.     update
  627.     .l xview
  628. } {0 1}
  629. catch {destroy .l}
  630. listbox .l -width 10 -height 5 -font $fixed
  631. .l insert 0 a b c d e f g h i j k l m n o p q r s t
  632. .l insert 1 "0123456789a123456789b123456789c123456789d123456789"
  633. pack .l
  634. update
  635. test listbox-3.116 {ListboxWidgetCmd procedure, "xview" option} {fonts} {
  636.     .l xview 4
  637.     .l xview
  638. } {0.08 0.28}
  639. test listbox-3.117 {ListboxWidgetCmd procedure, "xview" option} {
  640.     list [catch {.l xview foo} msg] $msg
  641. } {1 {expected integer but got "foo"}}
  642. test listbox-3.118 {ListboxWidgetCmd procedure, "xview" option} {
  643.     list [catch {.l xview zoom a b} msg] $msg
  644. } {1 {unknown option "zoom": must be moveto or scroll}}
  645. test listbox-3.119 {ListboxWidgetCmd procedure, "xview" option} {fonts} {
  646.     .l xview 0
  647.     .l xview moveto .4
  648.     update
  649.     .l xview
  650. } {0.4 0.6}
  651. test listbox-3.120 {ListboxWidgetCmd procedure, "xview" option} {fonts} {
  652.     .l xview 0
  653.     .l xview scroll 2 units
  654.     update
  655.     .l xview
  656. } {0.04 0.24}
  657. test listbox-3.121 {ListboxWidgetCmd procedure, "xview" option} {fonts} {
  658.     .l xview 30
  659.     .l xview scroll -1 pages
  660.     update
  661.     .l xview
  662. } {0.44 0.64}
  663. test listbox-3.122 {ListboxWidgetCmd procedure, "xview" option} {fonts} {
  664.     .l configure -width 1
  665.     update
  666.     .l xview 30
  667.     .l xview scroll -4 pages
  668.     update
  669.     .l xview
  670. } {0.52 0.54}
  671. test listbox-3.123 {ListboxWidgetCmd procedure, "yview" option} {
  672.     catch {destroy .l}
  673.     listbox .l
  674.     pack  .l
  675.     update
  676.     .l yview
  677. } {0 1}
  678. test listbox-3.124 {ListboxWidgetCmd procedure, "yview" option} {
  679.     catch {destroy .l}
  680.     listbox .l
  681.     .l insert 0 el1
  682.     pack  .l
  683.     update
  684.     .l yview
  685. } {0 1}
  686. catch {destroy .l}
  687. listbox .l -width 10 -height 5 -font $fixed
  688. .l insert 0 a b c d e f g h i j k l m n o p q r s t
  689. pack .l
  690. update
  691. test listbox-3.125 {ListboxWidgetCmd procedure, "yview" option} {
  692.     .l yview 4
  693.     update
  694.     .l yview
  695. } {0.2 0.45}
  696. test listbox-3.126 {ListboxWidgetCmd procedure, "yview" option, partial last line} {
  697.     mkPartial
  698.     .partial.l yview
  699. } {0 0.266667}
  700. test listbox-3.127 {ListboxWidgetCmd procedure, "xview" option} {
  701.     list [catch {.l yview foo} msg] $msg
  702. } {1 {bad listbox index "foo": must be active, anchor, end, @x,y, or a number}}
  703. test listbox-3.128 {ListboxWidgetCmd procedure, "xview" option} {
  704.     list [catch {.l yview foo a b} msg] $msg
  705. } {1 {unknown option "foo": must be moveto or scroll}}
  706. test listbox-3.129 {ListboxWidgetCmd procedure, "xview" option} {
  707.     .l yview 0
  708.     .l yview moveto .31
  709.     .l yview
  710. } {0.3 0.55}
  711. test listbox-3.130 {ListboxWidgetCmd procedure, "xview" option} {
  712.     .l yview 2
  713.     .l yview scroll 2 pages
  714.     .l yview
  715. } {0.4 0.65}
  716. test listbox-3.131 {ListboxWidgetCmd procedure, "xview" option} {
  717.     .l yview 10
  718.     .l yview scroll -3 units
  719.     .l yview
  720. } {0.35 0.6}
  721. test listbox-3.132 {ListboxWidgetCmd procedure, "xview" option} {
  722.     .l configure -height 2
  723.     update
  724.     .l yview 15
  725.     .l yview scroll -4 pages
  726.     .l yview
  727. } {0.55 0.65}
  728. test listbox-3.133 {ListboxWidgetCmd procedure, "xview" option} {
  729.     list [catch {.l whoknows} msg] $msg
  730. } {1 {bad option "whoknows": must be activate, bbox, cget, configure, curselection, delete, get, index, insert, itemcget, itemconfigure, nearest, scan, see, selection, size, xview, or yview}}
  731. test listbox-3.134 {ListboxWidgetCmd procedure, "xview" option} {
  732.     list [catch {.l c} msg] $msg
  733. } {1 {ambiguous option "c": must be activate, bbox, cget, configure, curselection, delete, get, index, insert, itemcget, itemconfigure, nearest, scan, see, selection, size, xview, or yview}}
  734. test listbox-3.135 {ListboxWidgetCmd procedure, "xview" option} {
  735.     list [catch {.l in} msg] $msg
  736. } {1 {ambiguous option "in": must be activate, bbox, cget, configure, curselection, delete, get, index, insert, itemcget, itemconfigure, nearest, scan, see, selection, size, xview, or yview}}
  737. test listbox-3.136 {ListboxWidgetCmd procedure, "xview" option} {
  738.     list [catch {.l s} msg] $msg
  739. } {1 {ambiguous option "s": must be activate, bbox, cget, configure, curselection, delete, get, index, insert, itemcget, itemconfigure, nearest, scan, see, selection, size, xview, or yview}}
  740. test listbox-3.137 {ListboxWidgetCmd procedure, "xview" option} {
  741.     list [catch {.l se} msg] $msg
  742. } {1 {ambiguous option "se": must be activate, bbox, cget, configure, curselection, delete, get, index, insert, itemcget, itemconfigure, nearest, scan, see, selection, size, xview, or yview}}
  743. # No tests for DestroyListbox:  I can't come up with anything to test
  744. # in this procedure.
  745. test listbox-4.1 {ConfigureListbox procedure} {fonts} {
  746.     catch {destroy .l}
  747.     listbox .l -setgrid 1 -width 25 -height 15
  748.     pack .l
  749.     update
  750.     set x [getsize .]
  751.     .l configure -setgrid 0
  752.     update
  753.     list $x [getsize .]
  754. } {25x15 185x263}
  755. resetGridInfo
  756. test listbox-4.2 {ConfigureListbox procedure} {
  757.     .l configure -highlightthickness -3
  758.     .l cget -highlightthickness
  759. } {0}
  760. test listbox-4.3 {ConfigureListbox procedure} {
  761.     .l configure -exportselection 0
  762.     .l delete 0 end
  763.     .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8
  764.     .l selection set 3 5
  765.     .l configure -exportselection 1
  766.     selection get
  767. } {el3
  768. el4
  769. el5}
  770. test listbox-4.4 {ConfigureListbox procedure} {
  771.     catch {destroy .e}
  772.     entry .e
  773.     .e insert 0 abc
  774.     .e select from 0
  775.     .e select to 2
  776.     .l configure -exportselection 0
  777.     .l delete 0 end
  778.     .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8
  779.     .l selection set 3 5
  780.     .l selection clear 3 5
  781.     .l configure -exportselection 1
  782.     list [selection own] [selection get]
  783. } {.e ab}
  784. test listbox-4.5 {-exportselection option} {
  785.     selection clear .
  786.     .l configure -exportselection 1
  787.     .l delete 0 end
  788.     .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8
  789.     .l selection set 1 1
  790.     set x {}
  791.     lappend x [catch {selection get} msg] $msg [.l curselection]
  792.     .l config -exportselection 0
  793.     lappend x [catch {selection get} msg] $msg [.l curselection]
  794.     .l selection clear 0 end
  795.     lappend x [catch {selection get} msg] $msg [.l curselection]
  796.     .l selection set 1 3
  797.     lappend x [catch {selection get} msg] $msg [.l curselection]
  798.     .l config -exportselection 1
  799.     lappend x [catch {selection get} msg] $msg [.l curselection]
  800. } {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
  801. el2
  802. el3} {1 2 3}}
  803. test listbox-4.6 {ConfigureListbox procedure} {fonts} {
  804.     catch {destroy .l}
  805.     # The following code (reset geometry, withdraw, etc.) is necessary
  806.     # to reset the state of some window managers like olvwm under
  807.     # SunOS 4.1.3.
  808.     wm geom . 300x300
  809.     update
  810.     wm geom . {}
  811.     wm withdraw .
  812.     listbox .l -font $fixed -width 15 -height 20
  813.     pack .l
  814.     update
  815.     wm deiconify .
  816.     set x [getsize .]
  817.     .l configure -setgrid 1
  818.     update
  819.     list $x [getsize .]
  820. } {115x328 15x20}
  821. test listbox-4.7 {ConfigureListbox procedure} {
  822.     catch {destroy .l}
  823.     wm withdraw .
  824.     listbox .l -font $fixed -width 30 -height 20 -setgrid 1
  825.     wm geom . +25+25
  826.     pack .l
  827.     update
  828.     wm deiconify .
  829.     set result [getsize .]
  830.     wm geom . 26x15
  831.     update
  832.     lappend result [getsize .]
  833.     .l configure -setgrid 1
  834.     update
  835.     lappend result [getsize .]
  836. } {30x20 26x15 26x15}
  837. wm geom . {}
  838. catch {destroy .l}
  839. resetGridInfo
  840. test listbox-4.8 {ConfigureListbox procedure} {
  841.     catch {destroy .l}
  842.     listbox .l -width 15 -height 20 -xscrollcommand "record x" 
  843.     -yscrollcommand "record y"
  844.     pack .l
  845.     update
  846.     .l configure -fg black
  847.     set log {}
  848.     update
  849.     set log
  850. } {{y 0 1} {x 0 1}}
  851. test listbox-4.9 {ConfigureListbox procedure, -listvar} {
  852.     catch {destroy .l}
  853.     set x [list a b c d]
  854.     listbox .l -listvar x
  855.     .l get 0 end
  856. } [list a b c d]
  857. test listbox-4.10 {ConfigureListbox, no listvar -> existing listvar} {
  858.     catch {destroy .l}
  859.     set x [list a b c d]
  860.     listbox .l
  861.     .l insert end 1 2 3 4
  862.     .l configure -listvar x
  863.     .l get 0 end
  864. } [list a b c d]
  865. test listbox-4.11 {ConfigureListbox procedure, listvar -> no listvar} {
  866.     catch {destroy .l}
  867.     set x [list a b c d]
  868.     listbox .l -listvar x
  869.     .l configure -listvar {}
  870.     .l insert end 1 2 3 4
  871.     list $x [.l get 0 end]
  872. } [list [list a b c d] [list a b c d 1 2 3 4]]
  873. test listbox-4.12 {ConfigureListbox procedure, listvar -> different listvar} {
  874.     catch {destroy .l}
  875.     set x [list a b c d]
  876.     set y [list 1 2 3 4]
  877.     listbox .l 
  878.     .l configure -listvar x
  879.     .l configure -listvar y
  880.     .l insert end 5 6 7 8
  881.     list $x $y
  882. } [list [list a b c d] [list 1 2 3 4 5 6 7 8]]
  883. test listbox-4.13 {ConfigureListbox, no listvar -> non-existant listvar} {
  884.     catch {destroy .l}
  885.     catch {unset x}
  886.     listbox .l
  887.     .l insert end a b c d
  888.     .l configure -listvar x
  889.     set x
  890. } [list a b c d]
  891. test listbox-4.14 {ConfigureListbox, non-existant listvar} {
  892.     catch {destroy .l}
  893.     catch {unset x}
  894.     listbox .l -listvar x
  895.     list [info exists x] $x
  896. } [list 1 {}]
  897. test listbox-4.15 {ConfigureListbox, listvar -> non-existant listvar} {
  898.     catch {destroy .l}
  899.     catch {unset y}
  900.     set x [list a b c d]
  901.     listbox .l -listvar x
  902.     .l configure -listvar y
  903.     list [info exists y] $y
  904. } [list 1 [list a b c d]]
  905. test listbox-4.16 {ConfigureListbox, listvar -> same listvar} {
  906.     catch {destroy .l}
  907.     set x [list a b c d]
  908.     listbox .l -listvar x
  909.     .l configure -listvar x
  910.     set x
  911. } [list a b c d]
  912. test listbox-4.17 {ConfigureListbox, no listvar -> no listvar} {
  913.     catch {destroy .l}
  914.     listbox .l
  915.     .l insert end a b c d
  916.     .l configure -listvar {}
  917.     .l get 0 end
  918. } [list a b c d]
  919. test listbox-4.18 {ConfigureListbox, no listvar -> bad listvar} {
  920.     catch {destroy .l}
  921.     listbox .l
  922.     .l insert end a b c d
  923.     set x "this is a " bad list"
  924.     catch {.l configure -listvar x} result
  925.     list [.l get 0 end] [.l cget -listvar] $result
  926. } [list [list a b c d] {} 
  927. "unmatched open quote in list: invalid -listvariable value"]
  928. test listbox-4.19 {ConfigureListbox, no listvar -> bad non-existent listvar} {
  929.     catch {destroy .l}
  930.     listbox .l -listvar foo
  931.     .l insert end a b c d
  932.     catch {.l configure -listvar ::zoo::bar::foo} result
  933.     list [.l get 0 end] [.l cget -listvar] $foo $result
  934. } [list [list a b c d] foo [list a b c d] 
  935. {can't set "::zoo::bar::foo": parent namespace doesn't exist}]
  936. # No tests for DisplayListbox:  I don't know how to test this procedure.
  937. test listbox-5.1 {ListboxComputeGeometry procedure} {fonts} {
  938.     catch {destroy .l}
  939.     listbox .l -font $fixed -width 15 -height 20
  940.     pack .l
  941.     list [winfo reqwidth .l] [winfo reqheight .l]
  942. } {115 328}
  943. test listbox-5.2 {ListboxComputeGeometry procedure} {fonts} {
  944.     catch {destroy .l}
  945.     listbox .l -font $fixed -width 0 -height 10
  946.     pack .l
  947.     update
  948.     list [winfo reqwidth .l] [winfo reqheight .l]
  949. } {17 168}
  950. test listbox-5.3 {ListboxComputeGeometry procedure} {fonts} {
  951.     catch {destroy .l}
  952.     listbox .l -font $fixed -width 0 -height 10 -bd 3
  953.     .l insert 0 Short "Really much longer" Longer
  954.     pack .l
  955.     update
  956.     list [winfo reqwidth .l] [winfo reqheight .l]
  957. } {138 170}
  958. test listbox-5.4 {ListboxComputeGeometry procedure} {fonts} {
  959.     catch {destroy .l}
  960.     listbox .l -font $fixed -width 10 -height 0
  961.     pack .l
  962.     update
  963.     list [winfo reqwidth .l] [winfo reqheight .l]
  964. } {80 24}
  965. test listbox-5.5 {ListboxComputeGeometry procedure} {fonts} {
  966.     catch {destroy .l}
  967.     listbox .l -font $fixed -width 10 -height 0 -highlightthickness 0
  968.     .l insert 0 Short "Really much longer" Longer
  969.     pack .l
  970.     update
  971.     list [winfo reqwidth .l] [winfo reqheight .l]
  972. } {76 52}
  973. test listbox-5.6 {ListboxComputeGeometry procedure} {
  974.     # If "0" in selected font had 0 width, caused divide-by-zero error.
  975.     catch {destroy .l}
  976.     pack [listbox .l -font {{open look glyph}}]
  977.     update
  978. } {}
  979.     
  980. catch {destroy .l}
  981. listbox .l -height 2 -xscrollcommand "record x" -yscrollcommand "record y"
  982. pack .l
  983. update
  984. test listbox-6.1 {InsertEls procedure} {
  985.     .l delete 0 end
  986.     .l insert end a b c d
  987.     .l insert 5 x y z
  988.     .l insert 2 A
  989.     .l insert 0 q r s
  990.     .l get 0 end
  991. } {q r s a b A c d x y z}
  992. test listbox-6.2 {InsertEls procedure} {
  993.     .l delete 0 end
  994.     .l insert 0 a b c d e f g h i j
  995.     .l selection anchor 2
  996.     .l insert 2 A B
  997.     .l index anchor
  998. } {4}
  999. test listbox-6.3 {InsertEls procedure} {
  1000.     .l delete 0 end
  1001.     .l insert 0 a b c d e f g h i j
  1002.     .l selection anchor 2
  1003.     .l insert 3 A B
  1004.     .l index anchor
  1005. } {2}
  1006. test listbox-6.4 {InsertEls procedure} {
  1007.     .l delete 0 end
  1008.     .l insert 0 a b c d e f g h i j
  1009.     .l yview 3
  1010.     update
  1011.     .l insert 2 A B
  1012.     .l index @0,0
  1013. } {5}
  1014. test listbox-6.5 {InsertEls procedure} {
  1015.     .l delete 0 end
  1016.     .l insert 0 a b c d e f g h i j
  1017.     .l yview 3
  1018.     update
  1019.     .l insert 3 A B
  1020.     .l index @0,0
  1021. } {3}
  1022. test listbox-6.6 {InsertEls procedure} {
  1023.     .l delete 0 end
  1024.     .l insert 0 a b c d e f g h i j
  1025.     .l activate 5
  1026.     .l insert 5 A B
  1027.     .l index active
  1028. } {7}
  1029. test listbox-6.7 {InsertEls procedure} {
  1030.     .l delete 0 end
  1031.     .l insert 0 a b c d e f g h i j
  1032.     .l activate 5
  1033.     .l insert 6 A B
  1034.     .l index active
  1035. } {5}
  1036. test listbox-6.8 {InsertEls procedure} {
  1037.     .l delete 0 end
  1038.     .l insert 0 a b c
  1039.     .l index active
  1040. } {2}
  1041. test listbox-6.9 {InsertEls procedure} {
  1042.     .l delete 0 end
  1043.     .l insert 0
  1044.     .l index active
  1045. } {0}
  1046. test listbox-6.10 {InsertEls procedure} {
  1047.     .l delete 0 end
  1048.     .l insert 0 a b "two words"  c d e f g h i j
  1049.     update
  1050.     set log {}
  1051.     .l insert 0 word
  1052.     update
  1053.     set log
  1054. } {{y 0 0.166667}}
  1055. test listbox-6.11 {InsertEls procedure} {
  1056.     .l delete 0 end
  1057.     .l insert 0 a b "two words"  c d e f g h i j
  1058.     update
  1059.     set log {}
  1060.     .l insert 0 "much longer entry"
  1061.     update
  1062.     set log
  1063. } {{y 0 0.166667} {x 0 1}}
  1064. test listbox-6.12 {InsertEls procedure} {fonts} {
  1065.     catch {destroy .l2}
  1066.     listbox .l2 -width 0 -height 0
  1067.     pack .l2 -side top
  1068.     .l2 insert 0 a b "two words"  c d
  1069.     set x {}
  1070.     lappend x [winfo reqwidth .l2] [winfo reqheight .l2]
  1071.     .l2 insert 0 "much longer entry"
  1072.     lappend x [winfo reqwidth .l2] [winfo reqheight .l2]
  1073. } {80 93 122 110}
  1074. test listbox-6.13 {InsertEls procedure, check -listvar update} {
  1075.     catch {destroy .l2}
  1076.     set x [list a b c d]
  1077.     listbox .l2 -listvar x
  1078.     .l2 insert 0 1 2 3 4
  1079.     set x
  1080. } [list 1 2 3 4 a b c d]
  1081. test listbox-6.14 {InsertEls procedure, check selection update} {
  1082.     catch {destroy .l2}
  1083.     listbox .l2
  1084.     .l2 insert 0 0 1 2 3 4
  1085.     .l2 selection set 2 4
  1086.     .l2 insert 0 a
  1087.     .l2 curselection
  1088. } [list 3 4 5]
  1089. test listbox-6.15 {InsertEls procedure, lost namespaced listvar, bug 1424513} {
  1090.     destroy .l2
  1091.     namespace eval test { variable foo {a b} }
  1092.     listbox .l2 -listvar ::test::foo
  1093.     namespace delete test
  1094.     .l2 insert end c d
  1095.     .l2 delete end
  1096.     .l2 insert end e f
  1097.     catch {set ::test::foo} result
  1098.     list [.l2 get 0 end] [.l2 cget -listvar] $result
  1099. } [list [list a b c e f] ::test::foo 
  1100. {can't read "::test::foo": no such variable}]
  1101. test listbox-7.1 {DeleteEls procedure} {
  1102.     .l delete 0 end
  1103.     .l insert 0 a b c d e f g h i j
  1104.     .l selection set 1 6
  1105.     .l delete 4 3
  1106.     list [.l size] [selection get]
  1107. } {10 {b
  1108. c
  1109. d
  1110. e
  1111. f
  1112. g}}
  1113. test listbox-7.2 {DeleteEls procedure} {
  1114.     .l delete 0 end
  1115.     .l insert 0 a b c d e f g h i j
  1116.     .l selection set 3 6
  1117.     .l delete 4 4
  1118.     list [.l size] [.l get 4] [.l curselection]
  1119. } {9 f {3 4 5}}
  1120. test listbox-7.3 {DeleteEls procedure} {
  1121.     .l delete 0 end
  1122.     .l insert 0 a b c d e f g h i j
  1123.     .l delete 0 3
  1124.     list [.l size] [.l get 0] [.l get 1]
  1125. } {6 e f}
  1126. test listbox-7.4 {DeleteEls procedure} {
  1127.     .l delete 0 end
  1128.     .l insert 0 a b c d e f g h i j
  1129.     .l delete 8 1000
  1130.     list [.l size] [.l get 7]
  1131. } {8 h}
  1132. test listbox-7.5 {DeleteEls procedure} {
  1133.     .l delete 0 end
  1134.     .l insert 0 a b c d e f g h i j
  1135.     .l selection anchor 2
  1136.     .l delete 0 1
  1137.     .l index anchor
  1138. } {0}
  1139. test listbox-7.6 {DeleteEls procedure} {
  1140.     .l delete 0 end
  1141.     .l insert 0 a b c d e f g h i j
  1142.     .l selection anchor 2
  1143.     .l delete 2
  1144.     .l index anchor
  1145. } {2}
  1146. test listbox-7.7 {DeleteEls procedure} {
  1147.     .l delete 0 end
  1148.     .l insert 0 a b c d e f g h i j
  1149.     .l selection anchor 4
  1150.     .l delete 2 5
  1151.     .l index anchor
  1152. } {2}
  1153. test listbox-7.8 {DeleteEls procedure} {
  1154.     .l delete 0 end
  1155.     .l insert 0 a b c d e f g h i j
  1156.     .l selection anchor 3
  1157.     .l delete 4 5
  1158.     .l index anchor
  1159. } {3}
  1160. test listbox-7.9 {DeleteEls procedure} {
  1161.     .l delete 0 end
  1162.     .l insert 0 a b c d e f g h i j
  1163.     .l yview 3
  1164.     update
  1165.     .l delete 1 2
  1166.     .l index @0,0
  1167. } {1}
  1168. test listbox-7.10 {DeleteEls procedure} {
  1169.     .l delete 0 end
  1170.     .l insert 0 a b c d e f g h i j
  1171.     .l yview 3
  1172.     update
  1173.     .l delete 3 4
  1174.     .l index @0,0
  1175. } {3}
  1176. test listbox-7.11 {DeleteEls procedure} {
  1177.     .l delete 0 end
  1178.     .l insert 0 a b c d e f g h i j
  1179.     .l yview 3
  1180.     update
  1181.     .l delete 4 6
  1182.     .l index @0,0
  1183. } {3}
  1184. test listbox-7.12 {DeleteEls procedure} {
  1185.     .l delete 0 end
  1186.     .l insert 0 a b c d e f g h i j
  1187.     .l yview 3
  1188.     update
  1189.     .l delete 3 end
  1190.     .l index @0,0
  1191. } {1}
  1192. test listbox-7.13 {DeleteEls procedure, updating view with partial last line} {
  1193.     mkPartial
  1194.     .partial.l yview 8
  1195.     update
  1196.     .partial.l delete 10 13
  1197.     .partial.l index @0,0
  1198. } {7}
  1199. test listbox-7.14 {DeleteEls procedure} {
  1200.     .l delete 0 end
  1201.     .l insert 0 a b c d e f g h i j
  1202.     .l activate 6
  1203.     .l delete 3 4
  1204.     .l index active
  1205. } {4}
  1206. test listbox-7.15 {DeleteEls procedure} {
  1207.     .l delete 0 end
  1208.     .l insert 0 a b c d e f g h i j
  1209.     .l activate 6
  1210.     .l delete 5 7
  1211.     .l index active
  1212. } {5}
  1213. test listbox-7.16 {DeleteEls procedure} {
  1214.     .l delete 0 end
  1215.     .l insert 0 a b c d e f g h i j
  1216.     .l activate 6
  1217.     .l delete 5 end
  1218.     .l index active
  1219. } {4}
  1220. test listbox-7.17 {DeleteEls procedure} {
  1221.     .l delete 0 end
  1222.     .l insert 0 a b c d e f g h i j
  1223.     .l activate 6
  1224.     .l delete 0 end
  1225.     .l index active
  1226. } {0}
  1227. test listbox-7.18 {DeleteEls procedure} {
  1228.     .l delete 0 end
  1229.     .l insert 0 a b c "two words" d e f g h i j
  1230.     update
  1231.     set log {}
  1232.     .l delete 4 6
  1233.     update
  1234.     set log
  1235. } {{y 0 0.25}}
  1236. test listbox-7.19 {DeleteEls procedure} {
  1237.     .l delete 0 end
  1238.     .l insert 0 a b c "two words" d e f g h i j
  1239.     update
  1240.     set log {}
  1241.     .l delete 3
  1242.     update
  1243.     set log
  1244. } {{y 0 0.2} {x 0 1}}
  1245. test listbox-7.20 {DeleteEls procedure} {fonts} {
  1246.     catch {destroy .l2}
  1247.     listbox .l2 -width 0 -height 0
  1248.     pack .l2 -side top
  1249.     .l2 insert 0 a b "two words" c d e f g
  1250.     set x {}
  1251.     lappend x [winfo reqwidth .l2] [winfo reqheight .l2]
  1252.     .l2 delete 2 4
  1253.     lappend x [winfo reqwidth .l2] [winfo reqheight .l2]
  1254. } {80 144 17 93}
  1255. catch {destroy .l2}
  1256. test listbox-7.21 {DeleteEls procedure, check -listvar update} {
  1257.     catch {destroy .l2}
  1258.     set x [list a b c d]
  1259.     listbox .l2 -listvar x
  1260.     .l2 delete 0 1
  1261.     set x
  1262. } [list c d]
  1263. test listbox-8.1 {ListboxEventProc procedure} {fonts} {
  1264.     catch {destroy .l}
  1265.     listbox .l -setgrid 1
  1266.     pack .l
  1267.     update
  1268.     set x [getsize .]
  1269.     destroy .l
  1270.     list $x [getsize .] [winfo exists .l] [info command .l]
  1271. } {20x10 150x178 0 {}}
  1272. resetGridInfo
  1273. test listbox-8.2 {ListboxEventProc procedure} {fonts} {
  1274.     catch {destroy .l}
  1275.     listbox .l -height 5 -width 10
  1276.     .l insert 0 a b c "A string that is very very long" d e f g h i j k
  1277.     pack .l
  1278.     update
  1279.     place .l -width 50 -height 80
  1280.     update
  1281.     list [.l xview] [.l yview]
  1282. } {{0 0.222222} {0 0.333333}}
  1283. test listbox-8.3 {ListboxEventProc procedure} {
  1284.     deleteWindows
  1285.     listbox .l1 -bg #543210
  1286.     rename .l1 .l2
  1287.     set x {}
  1288.     lappend x [winfo children .]
  1289.     lappend x [.l2 cget -bg]
  1290.     destroy .l1
  1291.     lappend x [info command .l*] [winfo children .]
  1292. } {.l1 #543210 {} {}}
  1293. test listbox-9.1 {ListboxCmdDeletedProc procedure} {
  1294.     deleteWindows
  1295.     listbox .l1
  1296.     rename .l1 {}
  1297.     list [info command .l*] [winfo children .]
  1298. } {{} {}}
  1299. test listbox-9.2 {ListboxCmdDeletedProc procedure, disabling -setgrid} fonts {
  1300.     catch {destroy .top}
  1301.     toplevel .top
  1302.     wm geom .top +0+0
  1303.     listbox .top.l -setgrid 1 -width 20 -height 10
  1304.     pack .top.l
  1305.     update
  1306.     set x [wm geometry .top]
  1307.     rename .top.l {}
  1308.     update
  1309.     lappend x [wm geometry .top]
  1310.     destroy .top
  1311.     set x
  1312. } {20x10+0+0 150x178+0+0}
  1313. catch {destroy .l}
  1314. listbox .l
  1315. pack .l
  1316. .l delete 0 end
  1317. .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11
  1318. test listbox-10.1 {GetListboxIndex procedure} {
  1319.     .l activate 3
  1320.     list [.l activate 3; .l index active] [.l activate 6; .l index active]
  1321. } {3 6}
  1322. test listbox-10.2 {GetListboxIndex procedure} {
  1323.     .l selection anchor 2
  1324.     .l index anchor
  1325. } 2
  1326. test listbox-10.3 {GetListboxIndex procedure} {
  1327.     .l insert end A B C D E
  1328.     .l selection anchor end
  1329.     .l delete 12 end
  1330.     list [.l index anchor] [.l index end]
  1331. } {12 12}
  1332. test listbox-10.4 {GetListboxIndex procedure} {
  1333.     list [catch {.l index a} msg] $msg
  1334. } {1 {bad listbox index "a": must be active, anchor, end, @x,y, or a number}}
  1335. test listbox-10.5 {GetListboxIndex procedure} {
  1336.     .l index end
  1337. } {12}
  1338. test listbox-10.6 {GetListboxIndex procedure} {
  1339.     .l get end
  1340. } {el11}
  1341. test listbox-10.7 {GetListboxIndex procedure} {
  1342.     .l delete 0 end
  1343.     .l index end
  1344. } 0
  1345. .l delete 0 end
  1346. .l insert 0 el0 el1 el2 el3 el4 el5 el6 el7 el8 el9 el10 el11
  1347. update
  1348. test listbox-10.8 {GetListboxIndex procedure} {
  1349.     list [catch {.l index @} msg] $msg
  1350. } {1 {bad listbox index "@": must be active, anchor, end, @x,y, or a number}}
  1351. test listbox-10.9 {GetListboxIndex procedure} {
  1352.     list [catch {.l index @foo} msg] $msg
  1353. } {1 {bad listbox index "@foo": must be active, anchor, end, @x,y, or a number}}
  1354. test listbox-10.10 {GetListboxIndex procedure} {
  1355.     list [catch {.l index @1x3} msg] $msg
  1356. } {1 {bad listbox index "@1x3": must be active, anchor, end, @x,y, or a number}}
  1357. test listbox-10.11 {GetListboxIndex procedure} {
  1358.     list [catch {.l index @1,} msg] $msg
  1359. } {1 {bad listbox index "@1,": must be active, anchor, end, @x,y, or a number}}
  1360. test listbox-10.12 {GetListboxIndex procedure} {
  1361.     list [catch {.l index @1,foo} msg] $msg
  1362. } {1 {bad listbox index "@1,foo": must be active, anchor, end, @x,y, or a number}}
  1363. test listbox-10.13 {GetListboxIndex procedure} {
  1364.     list [catch {.l index @1,2x} msg] $msg
  1365. } {1 {bad listbox index "@1,2x": must be active, anchor, end, @x,y, or a number}}
  1366. test listbox-10.14 {GetListboxIndex procedure} {fonts} {
  1367.     list [.l index @5,57] [.l index @5,58]
  1368. } {3 3}
  1369. test listbox-10.15 {GetListboxIndex procedure} {
  1370.     list [catch {.l index 1xy} msg] $msg
  1371. } {1 {bad listbox index "1xy": must be active, anchor, end, @x,y, or a number}}
  1372. test listbox-10.16 {GetListboxIndex procedure} {
  1373.     .l index 3
  1374. } {3}
  1375. test listbox-10.17 {GetListboxIndex procedure} {
  1376.     .l index 20
  1377. } {20}
  1378. test listbox-10.18 {GetListboxIndex procedure} {
  1379.     .l get 20
  1380. } {}
  1381. test listbox-10.19 {GetListboxIndex procedure} {
  1382.     .l index -2
  1383. } -2
  1384. test listbox-10.20 {GetListboxIndex procedure} {
  1385.     .l delete 0 end
  1386.     .l index 1
  1387. } 1
  1388. test listbox-11.1 {ChangeListboxView procedure, boundary conditions for index} {
  1389.     catch {destroy .l}
  1390.     listbox .l -height 5
  1391.     pack .l
  1392.     .l insert 0 a b c d e f g h i j
  1393.     .l yview 3
  1394.     update
  1395.     set x [.l index @0,0]
  1396.     .l yview -1
  1397.     update
  1398.     lappend x [.l index @0,0]
  1399. } {3 0}
  1400. test listbox-11.2 {ChangeListboxView procedure, boundary conditions for index} {
  1401.     catch {destroy .l}
  1402.     listbox .l -height 5
  1403.     pack .l
  1404.     .l insert 0 a b c d e f g h i j
  1405.     .l yview 3
  1406.     update
  1407.     set x [.l index @0,0]
  1408.     .l yview 20
  1409.     update
  1410.     lappend x [.l index @0,0]
  1411. } {3 5}
  1412. test listbox-11.3 {ChangeListboxView procedure} {
  1413.     catch {destroy .l}
  1414.     listbox .l -height 5 -yscrollcommand "record y"
  1415.     pack .l
  1416.     .l insert 0 a b c d e f g h i j
  1417.     update
  1418.     set log {}
  1419.     .l yview 2
  1420.     update
  1421.     list [.l yview] $log
  1422. }  {{0.2 0.7} {{y 0.2 0.7}}}
  1423. test listbox-11.4 {ChangeListboxView procedure} {
  1424.     catch {destroy .l}
  1425.     listbox .l -height 5 -yscrollcommand "record y"
  1426.     pack .l
  1427.     .l insert 0 a b c d e f g h i j
  1428.     update
  1429.     set log {}
  1430.     .l yview 8
  1431.     update
  1432.     list [.l yview] $log
  1433. }  {{0.5 1} {{y 0.5 1}}}
  1434. test listbox-11.5 {ChangeListboxView procedure} {
  1435.     catch {destroy .l}
  1436.     listbox .l -height 5 -yscrollcommand "record y"
  1437.     pack .l
  1438.     .l insert 0 a b c d e f g h i j
  1439.     .l yview 3
  1440.     update
  1441.     set log {}
  1442.     .l yview 3
  1443.     update
  1444.     list [.l yview] $log
  1445. }  {{0.3 0.8} {}}
  1446. test listbox-11.6 {ChangeListboxView procedure, partial last line} {
  1447.     mkPartial
  1448.     .partial.l yview 13
  1449.     .partial.l index @0,0
  1450. } {11}
  1451. catch {destroy .l}
  1452. listbox .l -font $fixed -xscrollcommand "record x" -width 10
  1453. .l insert 0 0123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789
  1454. pack .l
  1455. update
  1456. test listbox-12.1 {ChangeListboxOffset procedure} {fonts} {
  1457.     set log {}
  1458.     .l xview 99
  1459.     update
  1460.     list [.l xview] $log
  1461. } {{0.9 1} {{x 0.9 1}}}
  1462. test listbox-12.2 {ChangeListboxOffset procedure} {fonts} {
  1463.     set log {}
  1464.     .l xview moveto -.25
  1465.     update
  1466.     list [.l xview] $log
  1467. } {{0 0.1} {{x 0 0.1}}}
  1468. test listbox-12.3 {ChangeListboxOffset procedure} {fonts} {
  1469.     .l xview 10
  1470.     update
  1471.     set log {}
  1472.     .l xview 10
  1473.     update
  1474.     list [.l xview] $log
  1475. } {{0.1 0.2} {}}
  1476. catch {destroy .l}
  1477. listbox .l -font $fixed -width 10 -height 5
  1478. pack .l
  1479. .l insert 0 a bb c d e f g h i j k l m n o p q r s
  1480. .l insert 0 0123456789a123456789b123456789c123456789d123456789
  1481. update
  1482. set width [expr [lindex [.l bbox 2] 2] - [lindex [.l bbox 1] 2]]
  1483. set height [expr [lindex [.l bbox 2] 1] - [lindex [.l bbox 1] 1]]
  1484. test listbox-13.1 {ListboxScanTo procedure} {fonts} {
  1485.     .l yview 0
  1486.     .l xview 0
  1487.     .l scan mark 10 20
  1488.     .l scan dragto [expr 10-$width] [expr 20-$height]
  1489.     update
  1490.     list [.l xview] [.l yview]
  1491. } {{0.2 0.4} {0.5 0.75}}
  1492. test listbox-13.2 {ListboxScanTo procedure} {fonts} {
  1493.     .l yview 5
  1494.     .l xview 10
  1495.     .l scan mark 10 20
  1496.     .l scan dragto 20 40
  1497.     update
  1498.     set x [list [.l xview] [.l yview]]
  1499.     .l scan dragto [expr 20-$width] [expr 40-$height]
  1500.     update
  1501.     lappend x [.l xview] [.l yview]
  1502. } {{0 0.2} {0 0.25} {0.2 0.4} {0.5 0.75}}
  1503. test listbox-13.3 {ListboxScanTo procedure} {fonts} {
  1504.     .l yview moveto 1.0
  1505.     .l xview moveto 1.0
  1506.     .l scan mark 10 20
  1507.     .l scan dragto 5 10
  1508.     update
  1509.     set x [list [.l xview] [.l yview]]
  1510.     .l scan dragto [expr 5+$width] [expr 10+$height]
  1511.     update
  1512.     lappend x [.l xview] [.l yview]
  1513. } {{0.8 1} {0.75 1} {0.64 0.84} {0.25 0.5}}
  1514. test listbox-14.1 {NearestListboxElement procedure, partial last line} {
  1515.     mkPartial
  1516.     .partial.l nearest [winfo height .partial.l]
  1517. } {4}
  1518. catch {destroy .l}
  1519. listbox .l -font $fixed -width 20 -height 10
  1520. .l insert 0 a b c d e f g h i j k l m n o p q r s t
  1521. .l yview 4
  1522. pack .l
  1523. update
  1524. test listbox-14.2 {NearestListboxElement procedure} {fonts} {
  1525.     .l index @50,0
  1526. } {4}
  1527. test listbox-14.3 {NearestListboxElement procedure} {fonts} {
  1528.     list [.l index @50,35] [.l index @50,36]
  1529. } {5 6}
  1530. test listbox-14.4 {NearestListboxElement procedure} {fonts} {
  1531.     .l index @50,200
  1532. } {13}
  1533. test listbox-15.1 {ListboxSelect procedure} {
  1534.     .l delete 0 end
  1535.     .l insert 0 a b c d e f g h i j k l m n o p
  1536.     .l select set 2 4
  1537.     .l select set 7 12
  1538.     .l select clear 4 7
  1539.     .l curselection
  1540. } {2 3 8 9 10 11 12}
  1541. test listbox-15.2 {ListboxSelect procedure} {
  1542.     .l delete 0 end
  1543.     .l insert 0 a b c d e f g h i j k l m n o p
  1544.     catch {destroy .e}
  1545.     entry .e
  1546.     .e insert 0 "This is some text"
  1547.     .e select from 0
  1548.     .e select to 7
  1549.     .l selection clear 2 4
  1550.     set x [selection own]
  1551.     .l selection set 3
  1552.     list $x [selection own] [selection get]
  1553. } {.e .l d}
  1554. test listbox-15.3 {ListboxSelect procedure} {
  1555.     .l delete 0 end
  1556.     .l selection clear 0 end
  1557.     .l select set 0 end
  1558.     .l curselection
  1559. } {}
  1560. test listbox-15.4 {ListboxSelect procedure, boundary conditions for indices} {
  1561.     .l delete 0 end
  1562.     .l insert 0 a b c d e f
  1563.     .l select clear 0 end
  1564.     .l select set -2 -1
  1565.     .l curselection
  1566. } {}
  1567. test listbox-15.5 {ListboxSelect procedure, boundary conditions for indices} {
  1568.     .l delete 0 end
  1569.     .l insert 0 a b c d e f
  1570.     .l select clear 0 end
  1571.     .l select set -1 3
  1572.     .l curselection
  1573. } {0 1 2 3}
  1574. test listbox-15.6 {ListboxSelect procedure, boundary conditions for indices} {
  1575.     .l delete 0 end
  1576.     .l insert 0 a b c d e f
  1577.     .l select clear 0 end
  1578.     .l select set 2 4
  1579.     .l curselection
  1580. } {2 3 4}
  1581. test listbox-15.7 {ListboxSelect procedure, boundary conditions for indices} {
  1582.     .l delete 0 end
  1583.     .l insert 0 a b c d e f
  1584.     .l select clear 0 end
  1585.     .l select set 4 end
  1586.     .l curselection
  1587. } {4 5}
  1588. test listbox-15.8 {ListboxSelect procedure, boundary conditions for indices} {
  1589.     .l delete 0 end
  1590.     .l insert 0 a b c d e f
  1591.     .l select clear 0 end
  1592.     .l select set 4 30
  1593.     .l curselection
  1594. } {4 5}
  1595. test listbox-15.9 {ListboxSelect procedure, boundary conditions for indices} {
  1596.     .l delete 0 end
  1597.     .l insert 0 a b c d e f
  1598.     .l select clear 0 end
  1599.     .l select set end 30
  1600.     .l curselection
  1601. } {5}
  1602. test listbox-15.10 {ListboxSelect procedure, boundary conditions for indices} {
  1603.     .l delete 0 end
  1604.     .l insert 0 a b c d e f
  1605.     .l select clear 0 end
  1606.     .l select set 20 25
  1607.     .l curselection
  1608. } {}
  1609. test listbox-16.1 {ListboxFetchSelection procedure} {
  1610.     .l delete 0 end
  1611.     .l insert 0 a b c "two words" e f g h i \ k l m n o p
  1612.     .l selection set 2 4
  1613.     .l selection set 9
  1614.     .l selection set 11 12
  1615.     selection get
  1616. } "cntwo wordsnen\nlnm"
  1617. test listbox-16.2 {ListboxFetchSelection procedure} {
  1618.     .l delete 0 end
  1619.     .l insert 0 a b c "two words" e f g h i \ k l m n o p
  1620.     .l selection set 3
  1621.     selection get
  1622. } "two words"
  1623. test listbox-16.3 {ListboxFetchSelection procedure, retrieve in several parts} {
  1624.     set long "This is quite a long stringn"
  1625.     append long $long $long $long $long
  1626.     append long $long $long $long $long
  1627.     append long $long $long
  1628.     .l delete 0 end
  1629.     .l insert 0 1$long 2$long 3$long 4$long 5$long
  1630.     .l selection set 0 end
  1631.     set sel [selection get]
  1632.     string compare 1$longn2$longn3$longn4$longn5$long $sel
  1633. } {0}
  1634. catch {unset long sel}
  1635. test listbox-17.1 {ListboxLostSelection procedure} {
  1636.     .l delete 0 end
  1637.     .l insert 0 a b c d e
  1638.     .l select set 0 end
  1639.     catch {destroy .e}
  1640.     entry .e
  1641.     .e insert 0 "This is some text"
  1642.     .e select from 0
  1643.     .e select to 5
  1644.     .l curselection
  1645. } {}
  1646. test listbox-17.2 {ListboxLostSelection procedure} {
  1647.     .l delete 0 end
  1648.     .l insert 0 a b c d e
  1649.     .l select set 0 end
  1650.     .l configure -exportselection 0
  1651.     catch {destroy .e}
  1652.     entry .e
  1653.     .e insert 0 "This is some text"
  1654.     .e select from 0
  1655.     .e select to 5
  1656.     .l curselection
  1657. } {0 1 2 3 4}
  1658. catch {destroy .l}
  1659. listbox .l -font $fixed -width 10 -height 5
  1660. pack .l
  1661. update
  1662. test listbox-18.1 {ListboxUpdateVScrollbar procedure} {
  1663.     .l configure -yscrollcommand "record y"
  1664.     set log {}
  1665.     .l insert 0 a b c
  1666.     update
  1667.     .l insert end d e f g h
  1668.     update
  1669.     .l delete 0 end
  1670.     update
  1671.     set log
  1672. } {{y 0 1} {y 0 0.625} {y 0 1}}
  1673. test listbox-18.2 {ListboxUpdateVScrollbar procedure, partial last line} {
  1674.     mkPartial
  1675.     .partial.l configure -yscrollcommand "record y"
  1676.     set log {}
  1677.     .partial.l yview 3
  1678.     update
  1679.     set log
  1680. } {{y 0.2 0.466667}}
  1681. test listbox-18.3 {ListboxUpdateVScrollbar procedure} {
  1682.     proc bgerror args {
  1683. global x errorInfo
  1684. set x [list $args $errorInfo]
  1685.     }
  1686.     .l configure -yscrollcommand gorp
  1687.     .l insert 0 foo
  1688.     update
  1689.     set x
  1690. } {{{invalid command name "gorp"}} {invalid command name "gorp"
  1691.     while executing
  1692. "gorp 0 1"
  1693.     (vertical scrolling command executed by listbox)}}
  1694. if {[info exists bgerror]} {
  1695.     rename bgerror {}
  1696. }
  1697. catch {destroy .l}
  1698. listbox .l -font $fixed -width 10 -height 5
  1699. pack .l
  1700. update
  1701. test listbox-19.1 {ListboxUpdateVScrollbar procedure} {fonts} {
  1702.     .l configure -xscrollcommand "record x"
  1703.     set log {}
  1704.     .l insert 0 abc
  1705.     update
  1706.     .l insert 0 "This is a much longer string..."
  1707.     update
  1708.     .l delete 0 end
  1709.     update
  1710.     set log
  1711. } {{x 0 1} {x 0 0.322581} {x 0 1}}
  1712. test listbox-19.2 {ListboxUpdateVScrollbar procedure} {
  1713.     proc bgerror args {
  1714. global x errorInfo
  1715. set x [list $args $errorInfo]
  1716.     }
  1717.     .l configure -xscrollcommand bogus
  1718.     .l insert 0 foo
  1719.     update
  1720.     set x
  1721. } {{{invalid command name "bogus"}} {invalid command name "bogus"
  1722.     while executing
  1723. "bogus 0 1"
  1724.     (horizontal scrolling command executed by listbox)}}
  1725. set l [interp hidden]
  1726. deleteWindows
  1727. test listbox-20.1 {listbox vs hidden commands} {
  1728.     catch {destroy .l}
  1729.     listbox .l
  1730.     interp hide {} .l
  1731.     destroy .l
  1732.     list [winfo children .] [interp hidden]
  1733. } [list {} $l]
  1734. # tests for ListboxListVarProc
  1735. test listbox-21.1 {ListboxListVarProc} {
  1736.     catch {destroy .l}
  1737.     catch {unset x}
  1738.     listbox .l -listvar x
  1739.     set x [list a b c d]
  1740.     .l get 0 end
  1741. } [list a b c d]
  1742. test listbox-21.2 {ListboxListVarProc} {
  1743.     catch {destroy .l}
  1744.     set x [list a b c d]
  1745.     listbox .l -listvar x
  1746.     unset x
  1747.     set x
  1748. } [list a b c d]
  1749. test listbox-21.3 {ListboxListVarProc} {
  1750.     catch {destroy .l}
  1751.     set x [list a b c d]
  1752.     listbox .l -listvar x
  1753.     .l configure -listvar {}
  1754.     unset x
  1755.     info exists x
  1756. } 0
  1757. test listbox-21.4 {ListboxListVarProc} {
  1758.     catch {destroy .l}
  1759.     set x [list a b c d]
  1760.     listbox .l -listvar x
  1761.     lappend x e f g
  1762.     .l size
  1763. } 7
  1764. test listbox-21.5 {ListboxListVarProc, test selection after listvar mod} {
  1765.     catch {destroy .l}
  1766.     set x [list a b c d e f g]
  1767.     listbox .l -listvar x
  1768.     .l selection set end
  1769.     set x [list a b c d]
  1770.     set x [list 0 1 2 3 4 5 6]
  1771.     .l curselection
  1772. } {}
  1773. test listbox-21.6 {ListboxListVarProc, test selection after listvar mod} {
  1774.     catch {destroy .l}
  1775.     set x [list a b c d]
  1776.     listbox .l -listvar x
  1777.     .l selection set 3
  1778.     lappend x e f g
  1779.     .l curselection
  1780. } 3
  1781. test listbox-21.7 {ListboxListVarProc, test selection after listvar mod} {
  1782.     catch {destroy .l}
  1783.     set x [list a b c d]
  1784.     listbox .l -listvar x
  1785.     .l selection set 0
  1786.     set x [linsert $x 0 1 2 3 4]
  1787.     .l curselection
  1788. } 0
  1789. test listbox-21.8 {ListboxListVarProc, test selection after listvar mod} {
  1790.     catch {destroy .l}
  1791.     set x [list a b c d]
  1792.     listbox .l -listvar x
  1793.     .l selection set 2
  1794.     set x [list a b c]
  1795.     .l curselection
  1796. } 2
  1797. test listbox-21.9 {ListboxListVarProc, test hscrollbar after listvar mod} {
  1798.     catch {destroy .l}
  1799.     catch {unset x}
  1800.     set log {}
  1801.     listbox .l -font $fixed -width 10 -xscrollcommand "record x" -listvar x
  1802.     pack .l
  1803.     update
  1804.     lappend x "0000000000"
  1805.     update
  1806.     lappend x "00000000000000000000"
  1807.     update
  1808.     set log
  1809. } [list {x 0 1} {x 0 1} {x 0 0.5}]
  1810. test listbox-21.10 {ListboxListVarProc, test hscrollbar after listvar mod} {
  1811.     catch {destroy .l}
  1812.     catch {unset x}
  1813.     set log {}
  1814.     listbox .l -font $fixed -width 10 -xscrollcommand "record x" -listvar x
  1815.     pack .l
  1816.     update
  1817.     lappend x "0000000000"
  1818.     update
  1819.     lappend x "00000000000000000000"
  1820.     update
  1821.     set x [list "0000000000"]
  1822.     update
  1823.     set log
  1824. } [list {x 0 1} {x 0 1} {x 0 0.5} {x 0 1}]
  1825. test listbox-21.11 {ListboxListVarProc, bad list} {
  1826.     catch {destroy .l}
  1827.     catch {unset x}
  1828.     listbox .l -listvar x
  1829.     set x [list a b c d]
  1830.     catch {set x "this is a " bad list"} result
  1831.     set result
  1832. } {can't set "x": invalid listvar value}
  1833. test listbox-21.12 {ListboxListVarProc, cleanup item attributes} {
  1834.     catch {destroy .l}
  1835.     set x [list a b c d e f g]
  1836.     listbox .l -listvar x
  1837.     .l itemconfigure end -fg red
  1838.     set x [list a b c d]
  1839.     set x [list 0 1 2 3 4 5 6]
  1840.     .l itemcget end -fg
  1841. } {}
  1842. test listbox-21.12 {ListboxListVarProc, cleanup item attributes} {
  1843.     catch {destroy .l}
  1844.     set x [list a b c d e f g]
  1845.     listbox .l -listvar x
  1846.     .l itemconfigure end -fg red
  1847.     set x [list a b c d]
  1848.     set x [list 0 1 2 3 4 5 6]
  1849.     .l itemcget end -fg
  1850. } {}
  1851. test listbox-21.13 {listbox item configurations and listvar based deletions} {
  1852.     catch {destroy .l}
  1853.     catch {unset x}
  1854.     listbox .l -listvar x
  1855.     .l insert end a b c
  1856.     .l itemconfigure 1 -fg red
  1857.     set x [list b c]
  1858.     .l itemcget 1 -fg
  1859. } red
  1860. test listbox-21.14 {listbox item configurations and listvar based inserts} {
  1861.     catch {destroy .l}
  1862.     catch {unset x}
  1863.     listbox .l -listvar x
  1864.     .l insert end a b c
  1865.     .l itemconfigure 0 -fg red
  1866.     set x [list 1 2 3 4 a b c]
  1867.     .l itemcget 0 -fg
  1868. } red
  1869. test listbox-21.15 {ListboxListVarProc, update vertical scrollbar} {
  1870.     catch {destroy .l}
  1871.     catch {unset x}
  1872.     set log {}
  1873.     listbox .l -listvar x -yscrollcommand "record y" -font fixed -height 3
  1874.     pack .l
  1875.     update
  1876.     lappend x a b c d e f
  1877.     update
  1878.     set log
  1879. } [list {y 0 1} {y 0 0.5}]
  1880. test listbox-21.16 {ListboxListVarProc, update vertical scrollbar} {
  1881.     catch {destroy .l}
  1882.     catch {unset x}
  1883.     listbox .l -listvar x -height 3
  1884.     pack .l
  1885.     update
  1886.     set x [list 0 1 2 3 4 5]
  1887.     .l yview scroll 3 units
  1888.     update
  1889.     set result {}
  1890.     lappend result [.l yview]
  1891.     set x [lreplace $x 3 3]
  1892.     set x [lreplace $x 3 3]
  1893.     set x [lreplace $x 3 3]
  1894.     update
  1895.     lappend result [.l yview]
  1896.     set result
  1897. } [list {0.5 1} {0 1}]
  1898. # UpdateHScrollbar
  1899. test listbox-22.1 {UpdateHScrollbar} {
  1900.     catch {destroy .l}
  1901.     set log {}
  1902.     listbox .l -font $fixed -width 10 -xscrollcommand "record x"
  1903.     pack .l
  1904.     update
  1905.     .l insert end "0000000000"
  1906.     update
  1907.     .l insert end "00000000000000000000"
  1908.     update
  1909.     set log
  1910. } [list {x 0 1} {x 0 1} {x 0 0.5}]
  1911. # ConfigureListboxItem
  1912. test listbox-23.1 {ConfigureListboxItem} {
  1913.     catch {destroy .l}
  1914.     listbox .l
  1915.     catch {.l itemconfigure 0} result
  1916.     set result
  1917. } {item number "0" out of range}
  1918. test listbox-23.2 {ConfigureListboxItem} {
  1919.     catch {destroy .l}
  1920.     listbox .l
  1921.     .l insert end a b c d
  1922.     .l itemconfigure 0
  1923. } [list {-background background Background {} {}} 
  1924. {-bg -background} 
  1925. {-fg -foreground} 
  1926. {-foreground foreground Foreground {} {}} 
  1927. {-selectbackground selectBackground Foreground {} {}} 
  1928. {-selectforeground selectForeground Background {} {}}]
  1929. test listbox-23.3 {ConfigureListboxItem, itemco shortcut} {
  1930.     catch {destroy .l}
  1931.     listbox .l
  1932.     .l insert end a b c d
  1933.     .l itemco 0 -background
  1934. } {-background background Background {} {}}
  1935. test listbox-23.4 {ConfigureListboxItem, wrong num args} {
  1936.     catch {destroy .l}
  1937.     listbox .l
  1938.     .l insert end a
  1939.     catch {.l itemco} result
  1940.     set result
  1941. } {wrong # args: should be ".l itemconfigure index ?option? ?value? ?option value ...?"}
  1942. test listbox-23.5 {ConfigureListboxItem, multiple calls} {
  1943.     catch {destroy .l}
  1944.     listbox .l
  1945.     set i 0
  1946.     foreach color {red orange yellow green blue white violet} {
  1947. .l insert end $color
  1948. .l itemconfigure $i -bg $color
  1949. incr i
  1950.     }
  1951.     pack .l
  1952.     update
  1953.     list [.l itemcget 0 -bg] [.l itemcget 1 -bg] [.l itemcget 2 -bg] 
  1954.     [.l itemcget 3 -bg] [.l itemcget 4 -bg] [.l itemcget 5 -bg] 
  1955.     [.l itemcget 6 -bg]
  1956. } {red orange yellow green blue white violet}
  1957. catch {destroy .l}
  1958. listbox .l
  1959. .l insert end a b c d
  1960. set i 6
  1961. foreach test {
  1962.     {-background #ff0000 #ff0000 non-existent
  1963.     {unknown color name "non-existent"}}
  1964.     {-bg #ff0000 #ff0000 non-existent {unknown color name "non-existent"}}
  1965.     {-fg #110022 #110022 bogus {unknown color name "bogus"}}
  1966.     {-foreground #110022 #110022 bogus {unknown color name "bogus"}}
  1967.     {-selectbackground #110022 #110022 bogus {unknown color name "bogus"}}
  1968.     {-selectforeground #654321 #654321 bogus {unknown color name "bogus"}}
  1969. } {
  1970.     set name [lindex $test 0]
  1971.     test listbox-23.$i {configuration options} {
  1972. .l itemconfigure 0 $name [lindex $test 1]
  1973. list [lindex [.l itemconfigure 0 $name] 4] [.l itemcget 0 $name]
  1974.     } [list [lindex $test 2] [lindex $test 2]]
  1975.     incr i
  1976.     if {[lindex $test 3] != ""} {
  1977. test listbox-23.$i {configuration options} {
  1978.     list [catch {.l configure $name [lindex $test 3]} msg] $msg
  1979. } [list 1 [lindex $test 4]]
  1980.     }
  1981.     .l configure $name [lindex [.l configure $name] 3]
  1982.     incr i
  1983. }
  1984. # ListboxWidgetObjCmd, itemcget
  1985. test listbox-24.1 {itemcget} {
  1986.     catch {destroy .l}
  1987.     listbox .l
  1988.     .l insert end a b c d
  1989.     .l itemcget 0 -fg
  1990. } {}
  1991. test listbox-24.2 {itemcget} {
  1992.     catch {destroy .l}
  1993.     listbox .l
  1994.     .l insert end a b c d
  1995.     .l itemconfigure 0 -fg red
  1996.     .l itemcget 0 -fg
  1997. } red
  1998. test listbox-24.3 {itemcget} {
  1999.     catch {destroy .l}
  2000.     listbox .l
  2001.     .l insert end a b c d
  2002.     catch {.l itemcget 0} result
  2003.     set result
  2004. } {wrong # args: should be ".l itemcget index option"}
  2005. test listbox-24.3 {itemcget, itemcg shortcut} {
  2006.     catch {destroy .l}
  2007.     listbox .l
  2008.     .l insert end a b c d
  2009.     catch {.l itemcg 0} result
  2010.     set result
  2011. } {wrong # args: should be ".l itemcget index option"}
  2012. # General item configuration issues
  2013. test listbox-25.1 {listbox item configurations and widget based deletions} {
  2014.     catch {destroy .l}
  2015.     listbox .l
  2016.     .l insert end a
  2017.     .l itemconfigure 0 -fg red
  2018.     .l delete 0 end
  2019.     .l insert end a
  2020.     .l itemcget 0 -fg
  2021. } {}
  2022. test listbox-25.2 {listbox item configurations and widget based inserts} {
  2023.     catch {destroy .l}
  2024.     listbox .l
  2025.     .l insert end a b c
  2026.     .l itemconfigure 0 -fg red
  2027.     .l insert 0 1 2 3 4
  2028.     list [.l itemcget 0 -fg] [.l itemcget 4 -fg]
  2029. } [list {} red]
  2030.     
  2031. # state issues
  2032. test listbox-26.1 {listbox disabled state disallows inserts} {
  2033.     catch {destroy .l}
  2034.     listbox .l
  2035.     .l insert end a b c
  2036.     .l configure -state disabled
  2037.     .l insert end d e f
  2038.     .l get 0 end
  2039. } [list a b c]
  2040. test listbox-26.2 {listbox disabled state disallows deletions} {
  2041.     catch {destroy .l}
  2042.     listbox .l
  2043.     .l insert end a b c
  2044.     .l configure -state disabled
  2045.     .l delete 0 end
  2046.     .l get 0 end
  2047. } [list a b c]
  2048. test listbox-26.3 {listbox disabled state disallows selection modification} {
  2049.     catch {destroy .l}
  2050.     listbox .l
  2051.     .l insert end a b c
  2052.     .l selection set 0
  2053.     .l selection set 2
  2054.     .l configure -state disabled
  2055.     .l selection clear 0 end
  2056.     .l selection set 1
  2057.     .l curselection
  2058. } [list 0 2]
  2059. test listbox-26.4 {listbox disabled state disallows anchor modification} {
  2060.     catch {destroy .l}
  2061.     listbox .l
  2062.     .l insert end a b c
  2063.     .l selection anchor 0
  2064.     .l configure -state disabled
  2065.     .l selection anchor 2
  2066.     .l index anchor
  2067. } 0
  2068. test listbox-26.5 {listbox disabled state disallows active modification} {
  2069.     catch {destroy .l}
  2070.     listbox .l
  2071.     .l insert end a b c
  2072.     .l activate 0
  2073.     .l configure -state disabled
  2074.     .l activate 2
  2075.     .l index active
  2076. } 0
  2077. test listbox-27.1 {widget deletion while active} {
  2078.     destroy .l
  2079.     pack [listbox .l]
  2080.     update
  2081.     .l configure -cursor xterm -xscrollcommand { destroy .l }
  2082.     update idle
  2083.     winfo exists .l
  2084. } 0
  2085. test listbox-28.1 {listbox -activestyle} {
  2086.     catch {destroy .l}
  2087.     listbox .l -activ non
  2088.     .l cget -activestyle
  2089. } none
  2090. test listbox-28.2 {listbox -activestyle} {
  2091.     catch {destroy .l}
  2092.     listbox .l
  2093.     .l cget -activestyle
  2094. } underline
  2095. test listbox-28.3 {listbox -activestyle} {
  2096.     catch {destroy .l}
  2097.     listbox .l -activestyle dot
  2098.     .l cget -activestyle
  2099. } dotbox
  2100. test listbox-29.1 {listbox selection behavior, -state disabled} {
  2101.     destroy .l
  2102.     listbox .l
  2103.     .l insert end 1 2 3
  2104.     .l selection set 2
  2105.     set out [.l selection includes 2]
  2106.     .l configure -state disabled
  2107.     # still return 1 when disabled, because 'selection get' will work,
  2108.     # but selection cannot be changed (new behavior since 8.4)
  2109.     .l selection set 3
  2110.     lappend out [.l selection includes 2] [.l curselection]
  2111. } {1 1 2}
  2112. resetGridInfo
  2113. deleteWindows
  2114. option clear
  2115. # cleanup
  2116. ::tcltest::cleanupTests
  2117. return