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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test out the *NEW* "grid" command
  2. # of Tk.  It is (almost) organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1996 Sun Microsystems, Inc.
  5. # Copyright (c) 1998-1999 by Scriptics Corporation.
  6. # All rights reserved.
  7. #
  8. # RCS: @(#) $Id: grid.test,v 1.17.2.4 2006/04/12 22:31:01 pspjuth Exp $
  9. package require tcltest 2.1
  10. namespace import -force tcltest::configure
  11. namespace import -force tcltest::testsDirectory
  12. configure -testdir [file join [pwd] [file dirname [info script]]]
  13. configure -loadfile [file join [testsDirectory] constraints.tcl]
  14. tcltest::loadTestedCommands
  15. # helper routine to return "." to a sane state after a test
  16. # The variable GRID_VERBOSE can be used to "look" at the result
  17. # of one or all of the tests
  18. proc grid_reset {{test ?} {top .}} {
  19.     global GRID_VERBOSE
  20.     if {[info exists GRID_VERBOSE]} {
  21. if {$GRID_VERBOSE=="" || $GRID_VERBOSE==$test} {
  22.     puts -nonewline "grid test $test: "
  23.     flush stdout
  24.     gets stdin
  25. }
  26.     }
  27.     eval destroy [winfo children $top]
  28.     update
  29.     foreach {cols rows} [grid size .] {}
  30.     for {set i 0} {$i <= $cols} {incr i} {
  31.      grid columnconfigure . $i -weight 0 -minsize 0 -pad 0 -uniform ""
  32.     }
  33.     for {set i 0} {$i <= $rows} {incr i} {
  34.      grid rowconfigure . $i -weight 0 -minsize 0 -pad 0 -uniform ""
  35.     }
  36.     grid propagate . 1
  37.     update
  38. }
  39. grid_reset 0.0
  40. wm geometry . {}
  41. test grid-1.1 {basic argument checking} {
  42. list [catch grid msg] $msg
  43. } {1 {wrong # args: should be "grid option arg ?arg ...?"}}
  44. test grid-1.2 {basic argument checking} {
  45. list [catch {grid foo bar} msg] $msg
  46. } {1 {bad option "foo": must be bbox, columnconfigure, configure, forget, info, location, propagate, remove, rowconfigure, size, or slaves}}
  47. test grid-1.3 {basic argument checking} {
  48. button .b
  49. list [catch {grid .b -row 0 -column} msg] $msg
  50. } {1 {extra option or option with no value}}
  51. grid_reset 1.3
  52. test grid-1.4 {basic argument checking} {
  53. button .b
  54. list [catch {grid configure .b - foo} msg] $msg
  55. } {1 {unexpected parameter, "foo", in configure list. Should be window name or option}}
  56. grid_reset 1.4
  57. test grid-1.5 {basic argument checking} {
  58. list [catch {grid .} msg] $msg
  59. } {1 {can't manage ".": it's a top-level window}}
  60. test grid-1.6 {basic argument checking} {
  61. list [catch {grid x} msg] $msg
  62. } {1 {can't determine master window}}
  63. test grid-1.7 {basic argument checking} {
  64. list [catch {grid configure x} msg] $msg
  65. } {1 {can't determine master window}}
  66. test grid-1.8 {basic argument checking} {
  67. button .b
  68. list [catch {grid x .b} msg] $msg
  69. } {0 {}}
  70. grid_reset 1.8
  71. test grid-1.9 {basic argument checking} {
  72. button .b
  73. list [catch {grid configure x .b} msg] $msg
  74. } {0 {}}
  75. grid_reset 1.9
  76. test grid-2.1 {bbox} {
  77. list [catch {grid bbox .} msg] $msg
  78. } {0 {0 0 0 0}}
  79. test grid-2.2 {bbox} {
  80. button .b
  81. grid .b
  82. destroy .b
  83. update
  84. list [catch {grid bbox .} msg] $msg
  85. } {0 {0 0 0 0}}
  86. test grid-2.3 {bbox: argument checking} {
  87. list [catch {grid bbox . 0 0 5} msg] $msg
  88. } {1 {wrong # args: should be "grid bbox master ?column row ?column row??"}}
  89. test grid-2.4 {bbox} {
  90. list [catch {grid bbox .bad 0 0} msg] $msg
  91. } {1 {bad window path name ".bad"}}
  92. test grid-2.5 {bbox} {
  93. list [catch {grid bbox . x 0} msg] $msg
  94. } {1 {expected integer but got "x"}}
  95. test grid-2.6 {bbox} {
  96. list [catch {grid bbox . 0 x} msg] $msg
  97. } {1 {expected integer but got "x"}}
  98. test grid-2.7 {bbox} {
  99. list [catch {grid bbox . 0 0 x 0} msg] $msg
  100. } {1 {expected integer but got "x"}}
  101. test grid-2.8 {bbox} {
  102. list [catch {grid bbox . 0 0 0 x} msg] $msg
  103. } {1 {expected integer but got "x"}}
  104. test grid-2.9 {bbox} {
  105.     frame .1 -width 75 -height 75 -bg red
  106.     frame .2 -width 90 -height 90 -bg red
  107.     grid .1 -row 0 -column 0
  108.     grid .2 -row 1 -column 1
  109.     update
  110.     set a ""
  111.     lappend a [grid bbox .]
  112.     lappend a [grid bbox . 0 0]
  113.     lappend a [grid bbox . 0 0 1 1]
  114.     lappend a [grid bbox . 1 1]
  115.     set a
  116. } {{0 0 165 165} {0 0 75 75} {0 0 165 165} {75 75 90 90}}
  117. grid_reset 2.9
  118. test grid-2.10 {bbox} {
  119.     frame .1 -width 75 -height 75 -bg red
  120.     frame .2 -width 90 -height 90 -bg red
  121.     grid .1 -row 0 -column 0
  122.     grid .2 -row 1 -column 1
  123.     update
  124.     set a ""
  125.     lappend a [grid bbox . 10 10 0 0]
  126.     lappend a [grid bbox . -2 -2 -1 -1]
  127.     lappend a [grid bbox . 10 10 12 12]
  128.     set a
  129. } {{0 0 165 165} {0 0 0 0} {165 165 0 0}}
  130. grid_reset 2.10
  131. test grid-3.1 {configure: basic argument checking} {
  132.     list [catch {grid configure foo} msg] $msg
  133. } {1 {bad argument "foo": must be name of window}}
  134. test grid-3.2 {configure: basic argument checking} {
  135.     button .b
  136.     grid configure .b
  137.     grid slaves .
  138. } {.b}
  139. grid_reset 3.2
  140. test grid-3.3 {configure: basic argument checking} {
  141.     button .b
  142.     list [catch {grid .b -row -1} msg] $msg
  143. } {1 {bad grid value "-1": must be a non-negative integer}}
  144. grid_reset 3.3
  145. test grid-3.4 {configure: basic argument checking} {
  146.     button .b
  147.     list [catch {grid .b -column -1} msg] $msg
  148. } {1 {bad column value "-1": must be a non-negative integer}}
  149. grid_reset 3.4
  150. test grid-3.5 {configure: basic argument checking} {
  151.     button .b
  152.     list [catch {grid .b -rowspan 0} msg] $msg
  153. } {1 {bad rowspan value "0": must be a positive integer}}
  154. grid_reset 3.5
  155. test grid-3.6 {configure: basic argument checking} {
  156.     button .b
  157.     list [catch {grid .b -columnspan 0} msg] $msg
  158. } {1 {bad columnspan value "0": must be a positive integer}}
  159. grid_reset 3.6
  160. test grid-3.7 {configure: basic argument checking} {
  161.     frame .f
  162.     button .f.b
  163.     list [catch {grid .f .f.b} msg] $msg
  164. } {1 {can't put .f.b inside .}}
  165. grid_reset 3.7
  166. test grid-3.8 {configure: basic argument checking} {
  167.     button .b
  168.     grid configure x .b
  169.     grid slaves .
  170. } {.b}
  171. grid_reset 3.8
  172. test grid-3.9 {configure: basic argument checking} {
  173.     button .b
  174.     list [catch {grid configure y .b} msg] $msg
  175. } {1 {invalid window shortcut, "y" should be '-', 'x', or '^'}}
  176. grid_reset 3.9
  177. test grid-4.1 {forget: basic argument checking} {
  178.     list [catch {grid forget foo} msg] $msg
  179. } {1 {bad window path name "foo"}}
  180. test grid-4.2 {forget} {
  181.     button .c
  182.     grid [button .b]
  183.     set a [grid slaves .]
  184.     grid forget .b .c
  185.     lappend a [grid slaves .]
  186.     set a
  187. } {.b {}}
  188. grid_reset 4.2
  189. test grid-4.3 {forget} {
  190.     button .c
  191.     grid .c -row 2 -column 2 -rowspan 2 -columnspan 2 -padx 3 -pady 4 -sticky ns
  192.     grid forget .c
  193.     grid .c -row 0 -column 0
  194.     grid info .c
  195. } {-in . -column 0 -row 0 -columnspan 1 -rowspan 1 -ipadx 0 -ipady 0 -padx 0 -pady 0 -sticky {}}
  196. grid_reset 4.3
  197. test grid-4.3.1 {forget} {
  198.     button .c
  199.     grid .c -row 2 -column 2 -rowspan 2 -columnspan 2 -padx {3 5} -pady {4 7} -sticky ns
  200.     grid forget .c
  201.     grid .c -row 0 -column 0
  202.     grid info .c
  203. } {-in . -column 0 -row 0 -columnspan 1 -rowspan 1 -ipadx 0 -ipady 0 -padx 0 -pady 0 -sticky {}}
  204. grid_reset 4.3.1
  205. test grid-4.4 {forget, calling Tk_UnmaintainGeometry} {
  206.     frame .f -bd 2 -relief raised
  207.     place .f -x 10 -y 20 -width 200 -height 100
  208.     frame .f2 -width 50 -height 30 -bg red
  209.     grid .f2 -in .f
  210.     update
  211.     set x [winfo ismapped .f2]
  212.     grid forget .f2
  213.     place .f -x 30
  214.     update
  215.     lappend x [winfo ismapped .f2]
  216. } {1 0}
  217. grid_reset 4.4
  218. test grid-5.1 {info: basic argument checking} {
  219. list [catch {grid info a b} msg] $msg
  220. } {1 {wrong # args: should be "grid info window"}}
  221. test grid-5.2 {info} {
  222.     frame .1 -width 75 -height 75 -bg red
  223.     grid .1 -row 0 -column 0
  224.     update
  225.     list [catch {grid info .x} msg] $msg
  226. } {1 {bad window path name ".x"}}
  227. grid_reset 5.2
  228. test grid-5.3 {info} {
  229.     frame .1 -width 75 -height 75 -bg red
  230.     grid .1 -row 0 -column 0
  231.     update
  232.     list [catch {grid info .1} msg] $msg
  233. } {0 {-in . -column 0 -row 0 -columnspan 1 -rowspan 1 -ipadx 0 -ipady 0 -padx 0 -pady 0 -sticky {}}}
  234. grid_reset 5.3
  235. test grid-5.4 {info} {
  236.     frame .1 -width 75 -height 75 -bg red
  237.     update
  238.     list [catch {grid info .1} msg] $msg
  239. } {0 {}}
  240. grid_reset 5.4
  241. test grid-6.1 {location: basic argument checking} {
  242. list [catch "grid location ." msg] $msg
  243. } {1 {wrong # args: should be "grid location master x y"}}
  244. test grid-6.2 {location: basic argument checking} {
  245. list [catch "grid location .bad 0 0" msg] $msg
  246. } {1 {bad window path name ".bad"}}
  247. test grid-6.3 {location: basic argument checking} {
  248. list [catch "grid location . x y" msg] $msg
  249. } {1 {bad screen distance "x"}}
  250. test grid-6.4 {location: basic argument checking} {
  251. list [catch "grid location . 1c y" msg] $msg
  252. } {1 {bad screen distance "y"}}
  253. test grid-6.5 {location: basic argument checking} {
  254. frame .f
  255. grid location .f 10 10
  256. } {-1 -1}
  257. grid_reset 6.5
  258. test grid-6.6 {location (x)} {
  259.     frame .f -width 200 -height 100 -highlightthickness 0 -bg red
  260.     grid .f
  261.     update
  262.     set got ""
  263.     set result ""
  264.     for {set x -10} { $x < 220} { incr x} {
  265. set a [grid location . $x 0]
  266. if {$a != $got} {
  267.     lappend result $x->$a
  268.     set got $a
  269. }
  270.     }
  271.     set result
  272. } {{-10->-1 0} {0->0 0} {201->1 0}}
  273. grid_reset 6.6
  274. test grid-6.7 {location (y)} {
  275.     frame .f -width 200 -height 100 -highlightthickness 0 -bg red
  276.     grid .f
  277.     update
  278.     set got ""
  279.     set result ""
  280.     for {set y -10} { $y < 110} { incr y} {
  281. set a [grid location . 0 $y]
  282. if {$a != $got} {
  283.     lappend result $y->$a
  284.     set got $a
  285. }
  286.     }
  287.     set result
  288. } {{-10->0 -1} {0->0 0} {101->0 1}}
  289. grid_reset 6.7
  290. test grid-6.8 {location (weights)} {
  291.     frame .f -width 300 -height 100 -highlightthickness 0 -bg red
  292.     frame .a
  293.     grid .a
  294.     grid .f -in .a
  295.     grid rowconfigure .f 0 -weight 1
  296.     grid columnconfigure .f 0 -weight 1
  297.     grid propagate .a 0
  298.     .a configure -width 200 -height 15
  299.     update
  300.     set got ""
  301.     set result ""
  302.     for {set y -10} { $y < 210} { incr y} {
  303. set a [grid location . $y $y]
  304. if {$a != $got} {
  305.     lappend result $y->$a
  306.     set got $a
  307. }
  308.     }
  309.     set result
  310. } {{-10->-1 -1} {0->0 0} {16->0 1} {201->1 1}}
  311. grid_reset 6.8
  312. test grid-6.9 {location: check updates pending} {nonPortable} {
  313. set a ""
  314. foreach i {0 1 2} {
  315.     frame .$i -width 120 -height 75 -bg red
  316.     lappend a [grid location . 150 90]
  317.     grid .$i -row $i -column $i
  318. }
  319. set a
  320. } {{0 0} {1 1} {1 1}}
  321. grid_reset 6.9
  322. test grid-7.1 {propagate} {
  323.     list [catch {grid propagate . 1 xxx} msg] $msg
  324. } {1 {wrong # args: should be "grid propagate window ?boolean?"}}
  325. grid_reset 7.1
  326. test grid-7.2 {propagate} {
  327.     list [catch {grid propagate .} msg] $msg
  328. } {0 1}
  329. grid_reset 7.2
  330. test grid-7.3 {propagate} {
  331.     list [catch {grid propagate . 0;grid propagate .} msg] $msg
  332. } {0 0}
  333. grid_reset 7.3
  334. test grid-7.4 {propagate} {
  335.     list [catch {grid propagate .x} msg] $msg
  336. } {1 {bad window path name ".x"}}
  337. grid_reset 7.4
  338. test grid-7.5 {propagate} {
  339.     list [catch {grid propagate . x} msg] $msg
  340. } {1 {expected boolean value but got "x"}}
  341. grid_reset 7.5
  342. test grid-7.6 {propagate} {
  343.     frame .f -width 100 -height 100 -bg red
  344.     grid .f -row 0 -column 0
  345.     update
  346.     set a [winfo width .f]x[winfo height .f]
  347.     grid propagate .f 0
  348.     frame .g -width 75 -height 85 -bg green
  349.     grid .g -in .f -row 0 -column 0
  350.     update
  351.     lappend a [winfo width .f]x[winfo height .f]
  352.     grid propagate .f 1
  353.     update
  354.     lappend a [winfo width .f]x[winfo height .f]
  355.     set a
  356. } {100x100 100x100 75x85}
  357. grid_reset 7.6
  358. test grid-7.7 {propagate} {
  359.     grid propagate . 1
  360.     set res [list [grid propagate .]]
  361.     grid propagate . 0
  362.     lappend res [grid propagate .]
  363.     grid propagate . 0
  364.     lappend res [grid propagate .]
  365.     set res
  366. } [list 1 0 0]
  367. grid_reset 7.7
  368. test grid-8.1 {size} {
  369.     list [catch {grid size . foo} msg] $msg
  370. } {1 {wrong # args: should be "grid size window"}}
  371. grid_reset 8.1
  372. test grid-8.2 {size} {
  373.     list [catch {grid size .x} msg] $msg
  374. } {1 {bad window path name ".x"}}
  375. grid_reset 8.2
  376. test grid-8.3 {size} {
  377.     frame .f
  378.     list [catch {grid size .f} msg] $msg
  379. } {0 {0 0}}
  380. grid_reset 8.3
  381. test grid-8.4 {size} {
  382.     catch {unset a}
  383.     scale .f
  384.     grid .f -row 0 -column 0
  385.     update
  386.     lappend a [grid size .]
  387.     grid .f -row 4 -column 5
  388.     update
  389.     lappend a [grid size .]
  390.     grid .f -row 947 -column 663
  391.     update
  392.     lappend a [grid size .]
  393.     grid .f -row 0 -column 0
  394.     update
  395.     lappend a [grid size .]
  396.     set a
  397. } {{1 1} {6 5} {664 948} {1 1}}
  398. grid_reset 8.4
  399. test grid-8.5 {size} {
  400.     catch {unset a}
  401.     scale .f
  402.     grid .f -row 0 -column 0
  403.     update
  404.     lappend a [grid size .]
  405.     grid rowconfigure . 17 -weight 1
  406.     update
  407.     lappend a [grid size .]
  408.     grid columnconfigure . 63 -weight 1
  409.     update
  410.     lappend a [grid size .]
  411.     grid columnconfigure . 63 -weight 0
  412.     grid rowconfigure . 17 -weight 0
  413.     update
  414.     lappend a [grid size .]
  415.     set a
  416. } {{1 1} {1 18} {64 18} {1 1}}
  417. grid_reset 8.5
  418. test grid-8.6 {size} {
  419.     catch {unset a}
  420.     scale .f
  421.     grid .f -row 10 -column 50
  422.     update
  423.     lappend a [grid size .]
  424.     grid columnconfigure . 15 -weight 1
  425.     grid columnconfigure . 30 -weight 1
  426.     update
  427.     lappend a [grid size .]
  428.     grid .f -row 10 -column 20
  429.     update
  430.     lappend a [grid size .]
  431.     grid columnconfigure . 30 -weight 0
  432.     update
  433.     lappend a [grid size .]
  434.     grid .f -row 0 -column 0
  435.     update
  436.     lappend a [grid size .]
  437.     grid columnconfigure . 15 -weight 0
  438.     update
  439.     lappend a [grid size .]
  440.     set a
  441. } {{51 11} {51 11} {31 11} {21 11} {16 1} {1 1}}
  442. grid_reset 8.6
  443. test grid-9.1 {slaves} {
  444. list [catch {grid slaves .} msg] $msg
  445. } {0 {}}
  446. test grid-9.2 {slaves} {
  447. list [catch {grid slaves .foo} msg] $msg
  448. } {1 {bad window path name ".foo"}}
  449. test grid-9.3 {slaves} {
  450. list [catch {grid slaves a b} msg] $msg
  451. } {1 {wrong # args: should be "grid slaves window ?-option value...?"}}
  452. test grid-9.4 {slaves} {
  453. list [catch {grid slaves . a b} msg] $msg
  454. } {1 {bad option "a": must be -column or -row}}
  455. test grid-9.5 {slaves} {
  456. list [catch {grid slaves . -column x} msg] $msg
  457. } {1 {expected integer but got "x"}}
  458. test grid-9.6 {slaves} {
  459. list [catch {grid slaves . -row -3} msg] $msg
  460. } {1 {-row is an invalid value: should NOT be < 0}}
  461. test grid-9.7 {slaves} {
  462. list [catch {grid slaves . -foo 3} msg] $msg
  463. } {1 {bad option "-foo": must be -column or -row}}
  464. test grid-9.8 {slaves} {
  465. list [catch {grid slaves .x -row 3} msg] $msg
  466. } {1 {bad window path name ".x"}}
  467. test grid-9.9 {slaves} {
  468. list [catch {grid slaves . -row 3} msg] $msg
  469. } {0 {}}
  470. test grid-9.10 {slaves} {
  471. foreach i {0 1 2} {
  472.     label .$i -text $i
  473.     grid .$i -row $i -column $i
  474. }
  475. list [catch {grid slaves .} msg] $msg
  476. } {0 {.2 .1 .0}}
  477. grid_reset 9.10
  478. test grid-9.11 {slaves} {
  479.     catch {unset a}
  480.     foreach i {0 1 2} {
  481. label .$i -text $i
  482. label .$i-x -text $i-x
  483. grid .$i -row $i -column $i
  484. grid .$i-x -row $i -column [incr i]
  485.     }
  486.     foreach row {0 1 2 3} {
  487. lappend a $row{[grid slaves . -row $row]}
  488.     }
  489.     foreach col {0 1 2 3} {
  490. lappend a $col{[grid slaves . -column $col]}
  491.     }
  492.     set a
  493. } {{0{.0-x .0}} {1{.1-x .1}} {2{.2-x .2}} 3{} 0{.0} {1{.1 .0-x}} {2{.2 .1-x}} 3{.2-x}} 
  494. grid_reset 9.11
  495. # column/row configure
  496. test grid-10.1 {column/row configure} {
  497. list [catch {grid columnconfigure .} msg] $msg
  498. } {1 {wrong # args: should be "grid columnconfigure master index ?-option value...?"}}
  499. grid_reset 10.1
  500. test grid-10.2 {column/row configure} {
  501. list [catch {grid columnconfigure . 0 -weight 0 -pad} msg] $msg
  502. } {1 {wrong # args: should be "grid columnconfigure master index ?-option value...?"}}
  503. grid_reset 10.2
  504. test grid-10.3 {column/row configure} {
  505. list [catch {grid columnconfigure .f 0 -weight} msg] $msg
  506. } {1 {bad window path name ".f"}}
  507. grid_reset 10.3
  508. test grid-10.4 {column/row configure} {
  509. list [catch {grid columnconfigure . nine -weight} msg] $msg
  510. } {1 {expected integer but got "nine"}}
  511. grid_reset 10.4
  512. test grid-10.5 {column/row configure} {
  513. list [catch {grid columnconfigure . 265 -weight} msg] $msg
  514. } {0 0}
  515. grid_reset 10.5
  516. test grid-10.6 {column/row configure} {
  517. list [catch {grid columnconfigure . 0} msg] $msg
  518. } {0 {-minsize 0 -pad 0 -uniform {} -weight 0}}
  519. grid_reset 10.6
  520. test grid-10.7 {column/row configure} {
  521. list [catch {grid columnconfigure . 0 -foo} msg] $msg
  522. } {1 {bad option "-foo": must be -minsize, -pad, -uniform, or -weight}}
  523. grid_reset 10.7
  524. test grid-10.8 {column/row configure} {
  525. list [catch {grid columnconfigure . 0 -minsize foo} msg] $msg
  526. } {1 {bad screen distance "foo"}}
  527. grid_reset 10.8
  528. test grid-10.9 {column/row configure} {
  529. list [catch {grid columnconfigure . 0 -minsize foo} msg] $msg
  530. } {1 {bad screen distance "foo"}}
  531. grid_reset 10.9
  532. test grid-10.10 {column/row configure} {
  533. grid columnconfigure . 0 -minsize 10
  534. grid columnconfigure . 0 -minsize
  535. } {10}
  536. grid_reset 10.10
  537. test grid-10.11 {column/row configure} {
  538. list [catch {grid columnconfigure . 0 -weight bad} msg] $msg
  539. } {1 {expected integer but got "bad"}}
  540. grid_reset 10.11
  541. test grid-10.12 {column/row configure} {
  542. list [catch {grid columnconfigure . 0 -weight -3} msg] $msg
  543. } {1 {invalid arg "-weight": should be non-negative}}
  544. grid_reset 10.12
  545. test grid-10.13 {column/row configure} {
  546. grid columnconfigure . 0 -weight 3
  547. grid columnconfigure . 0 -weight
  548. } {3}
  549. grid_reset 10.13
  550. test grid-10.14 {column/row configure} {
  551. list [catch {grid columnconfigure . 0 -pad foo} msg] $msg
  552. } {1 {bad screen distance "foo"}}
  553. grid_reset 10.14
  554. test grid-10.15 {column/row configure} {
  555. list [catch {grid columnconfigure . 0 -pad -3} msg] $msg
  556. } {1 {invalid arg "-pad": should be non-negative}}
  557. grid_reset 10.15
  558. test grid-10.16 {column/row configure} {
  559. grid columnconfigure . 0 -pad 3
  560. grid columnconfigure . 0 -pad
  561. } {3}
  562. grid_reset 10.16
  563. test grid-10.17 {column/row configure} {
  564. frame .f
  565. set a ""
  566. grid columnconfigure .f 0 -weight 0
  567. lappend a [grid columnconfigure .f 0 -weight]
  568. grid columnconfigure .f 0 -weight 1
  569. lappend a [grid columnconfigure .f 0 -weight]
  570. grid rowconfigure .f 0 -weight 0
  571. lappend a [grid rowconfigure .f 0 -weight]
  572. grid rowconfigure .f 0 -weight 1
  573. lappend a [grid columnconfigure .f 0 -weight]
  574. grid columnconfigure .f 0 -weight 0
  575. set a
  576. } {0 1 0 1}
  577. grid_reset 10.17
  578. test grid-10.18 {column/row configure} {
  579. frame .f
  580. grid columnconfigure .f {0 2} -minsize 10 -weight 1
  581. list [grid columnconfigure .f 0 -minsize] 
  582. [grid columnconfigure .f 1 -minsize] 
  583. [grid columnconfigure .f 2 -minsize] 
  584. [grid columnconfigure .f 0 -weight] 
  585. [grid columnconfigure .f 1 -weight] 
  586. [grid columnconfigure .f 2 -weight]
  587. }  {10 0 10 1 0 1}
  588. grid_reset 10.18
  589. test grid-10.19 {column/row configure} {
  590. list [catch {grid columnconfigure . {0 -1 2} -weight 1} msg] $msg
  591. } {1 {grid columnconfigure: "-1" is out of range}}
  592. grid_reset 10.19
  593. test grid-10.20 {column/row configure} {
  594. grid columnconfigure . 0 -uniform foo
  595. grid columnconfigure . 0 -uniform
  596. } {foo}
  597. grid_reset 10.20
  598. test grid-10.30 {column/row configure - no indices} {
  599.     # Bug 1422430
  600.     set t [toplevel .test]
  601.     set res [list [catch {grid columnconfigure $t "" -weight 1} msg] $msg]
  602.     destroy $t
  603.     set res
  604. } {1 {no column indices specified}}
  605. test grid-10.31 {column/row configure - no indices} {
  606.     set t [toplevel .test]
  607.     set res [list [catch {grid rowconfigure $t "" -weight 1} msg] $msg]
  608.     destroy $t
  609.     set res
  610. } {1 {no row indices specified}}
  611. test grid-10.32 {column/row configure - invalid indices} {
  612.     list [catch {grid columnconfigure . {0 1 2} -weight} msg] $msg
  613. } {1 {grid columnconfigure: must specify a single element on retrieval}}
  614. test grid-10.33 {column/row configure - invalid indices} {
  615.     list [catch {grid rowconfigure . {0 1 2} -weight} msg] $msg
  616. } {1 {grid rowconfigure: must specify a single element on retrieval}}
  617. test grid-10.37 {column/row configure} {
  618.     list [catch {grid columnconfigure . 100000} msg] $msg
  619. } {0 {-minsize 0 -pad 0 -uniform {} -weight 0}}
  620. grid_reset 10.37
  621. test grid-10.38 {column/row configure} -body {
  622.     # This is a test for bug 1423666 where a column >= 10000 caused
  623.     # a crash in layout.  The update is needed to reach the layout stage.
  624.     # Test different combinations of row/column overflow
  625.     frame .f
  626.     set res {}
  627.     grid .f -column 0 -columnspan 1 -row 0 -rowspan 1
  628.     lappend res [catch {grid .f -row 10 -column 9999} msg] $msg ; update
  629.     lappend res [catch {grid .f -row 9999 -column 10} msg] $msg ; update
  630.     lappend res [catch {grid .f -columnspan 2 -column 9998} msg] $msg ; update
  631.     lappend res [catch {grid .f -rowspan 2 -row 9998} msg] $msg ; update
  632.     grid .f -column 0 -columnspan 1 -row 0 -rowspan 1
  633.     lappend res [catch {grid .f -column 9998 -columnspan 2} msg] $msg ; update
  634.     grid .f -column 0 -columnspan 1 -row 0 -rowspan 1
  635.     lappend res [catch {grid .f -row 9998 -rowspan 2} msg] $msg ; update
  636.     set res
  637. } -cleanup {destroy .f} -result [lrange {
  638.     1 {Column out of bounds}
  639.     1 {Row out of bounds}
  640.     1 {Column out of bounds}
  641.     1 {Row out of bounds}
  642.     1 {Column out of bounds}
  643.     1 {Row out of bounds}
  644. } 0 end]
  645. grid_reset 10.38
  646. test grid-10.39 {column/row configure} -body {
  647.     # Additional tests for row/column overflow
  648.     frame .f
  649.     frame .g
  650.     set res {}
  651.     grid .f -row 9998 -column 0
  652.     lappend res [catch {grid ^ .g} msg] $msg  ; update
  653.     grid forget .g
  654.     lappend res [catch {grid .g} msg] $msg  ; update
  655.     grid forget .f .g
  656.     lappend res [catch {grid .f - -column 9998} msg] $msg ; update
  657.     grid forget .f .g
  658.     lappend res [catch {eval grid [string repeat " x " 9999] .f} msg] $msg
  659.     update
  660.     set res
  661. } -cleanup {destroy .f .g} -result [lrange {
  662.     1 {Row out of bounds}
  663.     1 {Row out of bounds}
  664.     1 {Column out of bounds}
  665.     1 {Column out of bounds}
  666. } 0 end]
  667. grid_reset 10.39
  668. # auto-placement tests
  669. test grid-11.1 {default widget placement} {
  670. list [catch {grid ^} msg] $msg
  671. } {1 {can't use '^', cant find master}}
  672. grid_reset 11.1
  673. test grid-11.2 {default widget placement} {
  674. button .b
  675. list [catch {grid .b ^} msg] $msg
  676. } {1 {can't find slave to extend with "^".}}
  677. grid_reset 11.2
  678. test grid-11.3 {default widget placement} {
  679. button .b
  680. list [catch {grid .b - - .c} msg] $msg
  681. } {1 {bad window path name ".c"}}
  682. grid_reset 11.3
  683. test grid-11.4 {default widget placement} {
  684. button .b
  685. list [catch {grid .b - - = -} msg] $msg
  686. } {1 {invalid window shortcut, "=" should be '-', 'x', or '^'}}
  687. grid_reset 11.4
  688. test grid-11.5 {default widget placement} {
  689. button .b
  690. list [catch {grid .b - x -} msg] $msg
  691. } {1 {Must specify window before shortcut '-'.}}
  692. grid_reset 11.5
  693. test grid-11.6 {default widget placement} {
  694.     foreach i {1 2 3 4 5 6} {
  695. frame .f$i -width 50 -height 50 -highlightthickness 0 -bg red
  696.     }
  697.     grid .f1 .f2 .f3 .f4
  698.     grid .f5   -  x  .f6 -sticky nsew
  699.     update
  700.     set a ""
  701.     foreach i {5 6} {
  702. lappend a "[winfo x .f$i],[winfo y .f$i] 
  703. [winfo width .f$i],[winfo height .f$i]"
  704.     }
  705.     set a
  706. } {{0,50  100,50} {150,50  50,50}}
  707. grid_reset 11.6
  708. test grid-11.7 {default widget placement} {
  709.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  710.     grid .f -row 5 -column 5
  711.     list [catch "grid .f x -" msg] $msg
  712. } {1 {Must specify window before shortcut '-'.}}
  713. grid_reset 11.7
  714. test grid-11.8 {default widget placement} {
  715.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  716.     grid .f -row 5 -column 5
  717.     list [catch "grid .f ^ -" msg] $msg
  718. } {1 {Must specify window before shortcut '-'.}}
  719. grid_reset 11.8
  720. test grid-11.9 {default widget placement} {
  721.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  722.     grid .f -row 5 -column 5
  723.     list [catch "grid .f x ^" msg] $msg
  724. } {1 {can't find slave to extend with "^".}}
  725. grid_reset 11.9
  726. test grid-11.10 {default widget placement} {
  727.     foreach i {1 2 3} {
  728. frame .f$i -width 100 -height 50 -highlightthickness 0 -bg red
  729.     }
  730.     grid .f1 .f2  -sticky nsew
  731.     grid .f3   ^  -sticky nsew
  732.     update
  733.     set a ""
  734.     foreach i {1 2 3} {
  735. lappend a "[winfo x .f$i],[winfo y .f$i] 
  736. [winfo width .f$i],[winfo height .f$i]"
  737.     }
  738.     set a
  739. } {{0,0  100,50} {100,0  100,100} {0,50  100,50}}
  740. grid_reset 11.10
  741. test grid-11.11 {default widget placement} {
  742.     foreach i {1 2 3 4 5 6 7 8 9 10 11 12} {
  743. frame .f$i -width 50 -height 50 -highlightthickness 1 -highlightbackground black
  744.     }
  745.     grid .f1  .f2  .f3 .f4 -sticky nsew
  746.     grid .f5  .f6   -  .f7  -sticky nsew
  747.     grid .f8    ^   ^  .f9  -sticky nsew
  748.     grid .f10   ^   ^  .f11  -sticky nsew
  749. grid .f12   -   -   - -sticky nsew
  750.     update
  751.     set a ""
  752.     foreach i {5 6 7 8 9 10 11 12 } {
  753. lappend a "[winfo x .f$i],[winfo y .f$i] 
  754. [winfo width .f$i],[winfo height .f$i]"
  755.     }
  756.     set a
  757. } {{0,50  50,50} {50,50  100,150} {150,50  50,50} {0,100  50,50} {150,100  50,50} {0,150  50,50} {150,150  50,50} {0,200  200,50}}
  758. grid_reset 11.11
  759. test grid-11.12 {default widget placement} {
  760.     foreach i {1 2 3 4} {
  761. frame .f$i -width 75 -height 50 -highlightthickness 1 -highlightbackground black
  762.     }
  763.     grid .f1  .f2   .f3     -sticky nsew
  764.     grid .f4    ^           -sticky nsew
  765.     update
  766.     set a ""
  767.     foreach i {1 2 3 4} {
  768. lappend a "[winfo x .f$i],[winfo y .f$i] 
  769. [winfo width .f$i],[winfo height .f$i]"
  770.     }
  771.     grid .f4    ^   -column 1
  772.     update
  773.     foreach i {1 2 3 4} {
  774. lappend a "[winfo x .f$i],[winfo y .f$i] 
  775. [winfo width .f$i],[winfo height .f$i]"
  776. }
  777. set a
  778. } {{0,0  75,50} {75,0  75,100} {150,0  75,50} {0,50  75,50} {0,0  75,50} {75,0  75,100} {150,0  75,100} {75,50  75,50}}
  779. grid_reset 11.12
  780. test grid-11.13 {default widget placement} {
  781.     foreach i {1 2 3 4 5 6 7} {
  782. frame .f$i -width 40 -height 50 -highlightthickness 1 -highlightbackground black
  783.     }
  784.     grid .f1  .f2  .f3 .f4 .f5 -sticky nsew
  785.     grid .f6    -  .f7         -sticky nsew -columnspan 2
  786.     update
  787.     set a ""
  788.     foreach i {6 7} {
  789. lappend a "[winfo x .f$i],[winfo y .f$i] 
  790. [winfo width .f$i],[winfo height .f$i]"
  791.     }
  792.     set a
  793. } {{0,50  120,50} {120,50  80,50}}
  794. grid_reset 11.13
  795. test grid-11.14 {default widget placement} {
  796.     foreach i {1 2 3} {
  797. frame .f$i -width 60 -height 60 -highlightthickness 0 -bg red
  798.     }
  799.     grid .f1 .f2
  800.     grid  ^  .f3
  801.     update
  802.     set a ""
  803.     foreach i {1 2 3} {
  804. lappend a "[winfo x .f$i],[winfo y .f$i] 
  805. [winfo width .f$i],[winfo height .f$i]"
  806.     }
  807.     set a
  808. } {{0,30  60,60} {60,0  60,60} {60,60  60,60}}
  809. grid_reset 11.14
  810. test grid-11.15 {^ ^ test with multiple windows} {
  811.     foreach i {1 2 3 4} {
  812. frame .f$i -width 50 -height 50 -bd 1 -relief solid
  813.     }
  814.     grid .f1 .f2 .f3 -sticky ns
  815.     grid .f4 ^ ^
  816.     update
  817.     set a ""
  818.     foreach i {1 2 3 4} {
  819. lappend a "[winfo x .f$i],[winfo y .f$i]
  820. [winfo width .f$i],[winfo height .f$i]"
  821.     }
  822.     set a
  823. } {{0,0 50,50} {50,0 50,100} {100,0 50,100} {0,50 50,50}}
  824. grid_reset 11.15
  825. test grid-11.16 {default widget placement} {
  826.     foreach l {a b c d e} {
  827.         frame .$l -width 50 -height 50
  828.     }
  829.     grid .a .b .c .d -sticky news 
  830.     grid  x  ^  x .e -sticky news
  831.     update
  832.     set res ""
  833.     lappend res [winfo height .a]
  834.     lappend res [winfo height .b]
  835.     lappend res [winfo height .c]
  836. } {50 100 50}
  837. grid_reset 11.16
  838. test grid-11.17 {default widget placement} {
  839.     foreach l {a b c d e} {
  840.         frame .$l -width 50 -height 50
  841.     }
  842.     grid .a .b .c .d -sticky news
  843.     grid  ^  x  ^ .e -sticky news
  844.     update
  845.     set res ""
  846.     lappend res [winfo height .a]
  847.     lappend res [winfo height .b]
  848.     lappend res [winfo height .c]
  849. } {100 50 100}
  850. grid_reset 11.17
  851. test grid-12.1 {-sticky} {
  852.     catch {unset data}
  853.     frame .f -width 200 -height 100 -highlightthickness 0 -bg red
  854.     set a ""
  855.     grid .f
  856.     grid rowconfigure . 0 -weight 1
  857.     grid columnconfigure . 0 -weight 1
  858.     grid propagate . 0
  859.     . configure -width 250 -height 150
  860.     foreach i { {} n s e w ns ew nw ne se sw nse nsw sew new nsew} {
  861. grid .f -sticky $i
  862. update
  863. array set data [grid info .f]
  864. append a "($data(-sticky)) [winfo x .f] [winfo y .f] [winfo width .f] [winfo height .f]n"
  865.     }
  866.     set a
  867. } {() 25 25 200 100
  868. (n) 25 0 200 100
  869. (s) 25 50 200 100
  870. (e) 50 25 200 100
  871. (w) 0 25 200 100
  872. (ns) 25 0 200 150
  873. (ew) 0 25 250 100
  874. (nw) 0 0 200 100
  875. (ne) 50 0 200 100
  876. (es) 50 50 200 100
  877. (sw) 0 50 200 100
  878. (nes) 50 0 200 150
  879. (nsw) 0 0 200 150
  880. (esw) 0 50 250 100
  881. (new) 0 0 250 100
  882. (nesw) 0 0 250 150
  883. }
  884. grid_reset 12.1
  885.    
  886. test grid-12.2 {-sticky} {
  887.     frame .f -bg red
  888.     list [catch "grid .f -sticky glue" msg] $msg
  889. } {1 {bad stickyness value "glue": must be a string containing n, e, s, and/or w}}
  890. grid_reset 12.2
  891.    
  892. test grid-12.3 {-sticky} {
  893.     frame .f -bg red
  894.     grid .f -sticky {n,s,e,w}
  895.     array set A [grid info .f]
  896.     set A(-sticky)
  897. } {nesw}
  898. grid_reset 12.3
  899. test grid-13.1 {-in} {
  900.     frame .f -bg red
  901.     list [catch "grid .f -in .f" msg] $msg
  902. } {1 {Window can't be managed in itself}}
  903. grid_reset 13.1
  904. test grid-13.2 {-in} {
  905.     frame .f -bg red
  906.     list [catch "grid .f -in .bad" msg] $msg
  907. } {1 {bad window path name ".bad"}}
  908. grid_reset 13.2
  909. test grid-13.3 {-in} {
  910.     frame .f -bg red
  911.     toplevel .top
  912.     list [catch "grid .f -in .top" msg] $msg
  913. } {1 {can't put .f inside .top}}
  914. destroy .top
  915. grid_reset 13.3
  916. test grid-13.4 {-ipadx} {
  917.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  918.     list [catch "grid .f -ipadx x" msg] $msg
  919. } {1 {bad ipadx value "x": must be positive screen distance}}
  920. grid_reset 13.4
  921. test grid-13.4.1 {-ipadx} {
  922.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  923.     list [catch "grid .f -ipadx {5 5}" msg] $msg
  924. } {1 {bad ipadx value "5 5": must be positive screen distance}}
  925. grid_reset 13.4.1
  926. test grid-13.5 {-ipadx} {
  927.     frame .f -width 200 -height 100 -highlightthickness 0 -bg red
  928.     grid .f
  929.     update
  930.     set a [winfo width .f]
  931.     grid .f -ipadx 1
  932.     update
  933.     list $a [winfo width .f]
  934. } {200 202}
  935. grid_reset 13.5
  936. test grid-13.6 {-ipady} {
  937.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  938.     list [catch "grid .f -ipady x" msg] $msg
  939. } {1 {bad ipady value "x": must be positive screen distance}}
  940. grid_reset 13.6
  941. test grid-13.6.1 {-ipady} {
  942.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  943.     list [catch "grid .f -ipady {5 5}" msg] $msg
  944. } {1 {bad ipady value "5 5": must be positive screen distance}}
  945. grid_reset 13.6.1
  946. test grid-13.7 {-ipady} {
  947.     frame .f -width 200 -height 100 -highlightthickness 0 -bg red
  948.     grid .f
  949.     update
  950.     set a [winfo height .f]
  951.     grid .f -ipady 1
  952.     update
  953.     list $a [winfo height .f]
  954. } {100 102}
  955. grid_reset 13.7
  956. test grid-13.8 {-padx} {
  957.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  958.     list [catch "grid .f -padx x" msg] $msg
  959. } {1 {bad pad value "x": must be positive screen distance}}
  960. grid_reset 13.8
  961. test grid-13.8.1 {-padx} {
  962.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  963.     list [catch "grid .f -padx {10 x}" msg] $msg
  964. } {1 {bad 2nd pad value "x": must be positive screen distance}}
  965. grid_reset 13.8.1
  966. test grid-13.9 {-padx} {
  967.     frame .f -width 200 -height 100 -highlightthickness 0 -bg red
  968.     grid .f
  969.     update
  970.     set a "[winfo width .f] [winfo width .]"
  971.     grid .f -padx 1
  972.     update
  973.     list $a "[winfo width .f] [winfo width .] [winfo x .f]"
  974. } {{200 200} {200 202 1}}
  975. grid_reset 13.9
  976. test grid-13.9.1 {-padx} {
  977.     frame .f -width 200 -height 100 -highlightthickness 0 -bg red
  978.     grid .f
  979.     update
  980.     set a "[winfo width .f] [winfo width .]"
  981.     grid .f -padx {10 5}
  982.     update
  983.     list $a "[winfo width .f] [winfo width .] [winfo x .f]"
  984. } {{200 200} {200 215 10}}
  985. grid_reset 13.9.1
  986. test grid-13.10 {-pady} {
  987.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  988.     list [catch "grid .f -pady x" msg] $msg
  989. } {1 {bad pad value "x": must be positive screen distance}}
  990. grid_reset 13.10
  991. test grid-13.10.1 {-pady} {
  992.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  993.     list [catch "grid .f -pady {10 x}" msg] $msg
  994. } {1 {bad 2nd pad value "x": must be positive screen distance}}
  995. grid_reset 13.10.1
  996. test grid-13.11 {-pady} {
  997.     frame .f -width 200 -height 100 -highlightthickness 0 -bg red
  998.     grid .f
  999.     update
  1000.     set a "[winfo height .f] [winfo height .]"
  1001.     grid .f -pady 1
  1002.     update
  1003.     list $a "[winfo height .f] [winfo height .] [winfo y .f]"
  1004. } {{100 100} {100 102 1}}
  1005. grid_reset 13.11
  1006. test grid-13.11.1 {-pady} {
  1007.     frame .f -width 200 -height 100 -highlightthickness 0 -bg red
  1008.     grid .f
  1009.     update
  1010.     set a "[winfo height .f] [winfo height .]"
  1011.     grid .f -pady {4 16}
  1012.     update
  1013.     list $a "[winfo height .f] [winfo height .] [winfo y .f]"
  1014. } {{100 100} {100 120 4}}
  1015. grid_reset 13.11.1
  1016. test grid-13.12 {-ipad x and y} {
  1017.     frame .f -width 20 -height 20 -highlightthickness 0 -bg red
  1018.     grid columnconfigure . 0 -minsize 150
  1019.     grid rowconfigure . 0 -minsize 100
  1020.     set a ""
  1021.     foreach x {0 5} {
  1022.      foreach y {0 5} {
  1023.     grid .f -ipadx $x -ipady $y
  1024.     update
  1025.     append a " $x,$y:"
  1026.     foreach prop {x y width height} {
  1027.      append a ,[winfo $prop .f]
  1028.     }
  1029. }
  1030.     }
  1031.     set a
  1032. } { 0,0:,65,40,20,20 0,5:,65,35,20,30 5,0:,60,40,30,20 5,5:,60,35,30,30}
  1033. grid_reset 13.12
  1034. test grid-13.13 {reparenting} {
  1035.     frame .1
  1036.     frame .2
  1037.     button .b
  1038.     grid .1 .2
  1039.     grid .b -in .1
  1040.     set a ""
  1041.     catch {unset info}; array set info [grid info .b]
  1042.     lappend a [grid slaves .1],[grid slaves .2],$info(-in)
  1043.     grid .b -in .2
  1044.     catch {unset info}; array set info [grid info .b]
  1045.     lappend a [grid slaves .1],[grid slaves .2],$info(-in)
  1046.     unset info
  1047.     set a
  1048. } {.b,,.1 ,.b,.2}
  1049. grid_reset 13.13
  1050. test grid-14.1 {structure notify} {
  1051.     frame .f -width 200 -height 100 -highlightthickness 0 -bg red
  1052.     frame .g -width 200 -height 100 -highlightthickness 0 -bg red
  1053.     grid .f 
  1054.     grid .g -in .f    
  1055.     update
  1056.     set a ""
  1057.     lappend a "[winfo x .g],[winfo y .g] 
  1058.         [winfo width .g],[winfo height .g]"
  1059.     .f configure -bd 5 -relief raised
  1060.     update
  1061.     lappend a "[winfo x .g],[winfo y .g] 
  1062.         [winfo width .g],[winfo height .g]"
  1063.     set a
  1064. } {{0,0  200,100} {5,5  200,100}}
  1065. grid_reset 14.1
  1066. test grid-14.2 {structure notify} {
  1067.     frame .f -width 200 -height 100 
  1068.     frame .f.g -width 200 -height 100 
  1069.     grid .f 
  1070.     grid .f.g
  1071.     update
  1072.     set a ""
  1073.     lappend a [grid bbox .],[grid bbox .f]
  1074.     .f config -bd 20
  1075.     update
  1076.     lappend a [grid bbox .],[grid bbox .f]
  1077. } {{0 0 200 100,0 0 200 100} {0 0 240 140,20 20 200 100}}
  1078. grid_reset 14.2
  1079. test grid-14.3 {map notify: bug 1648} {nonPortable} {
  1080.     # This test is nonPortable because the number of times
  1081.     # A(.) will be incremented is unspecified--the behavior
  1082.     # is different accross window managers.
  1083.     global A
  1084.     catch {unset A}
  1085.     bind . <Configure> {incr A(%W)}
  1086.     set A(.) 0
  1087.     foreach i {0 1 2} {
  1088. frame .$i -width 100 -height 75
  1089. set A(.$i) 0
  1090.     }
  1091.     grid .0 .1 .2
  1092.     update
  1093.     bind <Configure> .1 {destroy .0}
  1094.     .2 configure -bd 10
  1095.     update
  1096.     bind . <Configure> {}
  1097.     array get A
  1098. } {.2 2 .0 1 . 2 .1 1}
  1099. grid_reset 14.3
  1100. test grid-15.1 {lost slave} {
  1101.     button .b
  1102.     grid .b
  1103.     set a [grid slaves .]
  1104.     pack .b
  1105.     lappend a [grid slaves .]
  1106.     grid .b
  1107.     lappend a [grid slaves .]
  1108. } {.b {} .b}
  1109. grid_reset 15.1
  1110. test grid-15.2 {lost slave} {
  1111.     frame .f
  1112.     grid .f
  1113.     button .b
  1114.     grid .b -in .f
  1115.     set a [grid slaves .f]
  1116.     pack .b
  1117.     lappend a [grid slaves .f]
  1118.     grid .b -in .f
  1119.     lappend a [grid slaves .f]
  1120. } {.b {} .b}
  1121. grid_reset 15.2
  1122. test grid-16.1 {layout centering} {
  1123.     foreach i {0 1 2} {
  1124.      frame .$i -bg gray  -width 75 -height 50 -bd 2 -relief ridge
  1125.      grid .$i -row $i -column $i -sticky nswe
  1126.     }
  1127.     grid propagate . 0
  1128.     . configure -width 300 -height 250
  1129.     update
  1130.     grid bbox .
  1131. } {37 50 225 150}
  1132. grid_reset 16.1
  1133. test grid-16.2 {layout weights (expanding)} {
  1134.     foreach i {0 1 2} {
  1135.      frame .$i -bg gray  -width 75 -height 50 -bd 2 -relief ridge
  1136.      grid .$i -row $i -column $i -sticky nswe
  1137.      grid rowconfigure . $i -weight [expr $i + 1]
  1138.      grid columnconfigure . $i -weight [expr $i + 1]
  1139.     }
  1140.     grid propagate . 0
  1141.     . configure -width 500 -height 300
  1142.     set a ""
  1143.     update
  1144.     foreach i {0 1 2} {
  1145. lappend a [winfo width .$i]-[winfo height .$i]
  1146.     }
  1147.     set a
  1148. } {120-75 167-100 213-125}
  1149. grid_reset 16.2
  1150. test grid-16.3 {layout weights (shrinking)} {
  1151.     foreach i {0 1 2} {
  1152.      frame .$i -bg gray  -width 100 -height 75 -bd 2 -relief ridge
  1153.      grid .$i -row $i -column $i -sticky nswe
  1154.      grid rowconfigure . $i -weight [expr $i + 1]
  1155.      grid columnconfigure . $i -weight [expr $i + 1]
  1156.     }
  1157.     grid propagate . 0
  1158.     . configure -width 200 -height 150
  1159.     set a ""
  1160.     update
  1161.     foreach i {0 1 2} {
  1162. lappend a [winfo width .$i]-[winfo height .$i]
  1163.     }
  1164.     set a
  1165. } {84-63 66-50 50-37}
  1166. grid_reset 16.3
  1167. test grid-16.4 {layout weights (shrinking with minsize)} {
  1168.     foreach i {0 1 2} {
  1169.      frame .$i -bg gray  -width 100 -height 75 -bd 2 -relief ridge
  1170.      grid .$i -row $i -column $i -sticky nswe
  1171.      grid rowconfigure . $i -weight [expr $i + 1] -minsize 45
  1172.      grid columnconfigure . $i -weight [expr $i + 1] -minsize 65
  1173.     }
  1174.     grid propagate . 0
  1175.     . configure -width 200 -height 150
  1176.     set a ""
  1177.     update
  1178.     foreach i {0 1 2} {
  1179. lappend a [winfo width .$i]-[winfo height .$i]
  1180.     }
  1181.     set a
  1182. } {70-60 65-45 65-45}
  1183. grid_reset 16.4
  1184. test grid-16.5 {layout weights (shrinking at minsize)} {
  1185.     foreach i {0 1 2} {
  1186.      frame .$i -bg gray  -width 100 -height 75 -bd 2 -relief ridge
  1187.      grid .$i -row $i -column $i -sticky nswe
  1188.      grid rowconfigure . $i -weight 0 -minsize 70
  1189.      grid columnconfigure . $i -weight 0 -minsize 90
  1190.     }
  1191.     grid propagate . 0
  1192.     . configure -width 100 -height 75
  1193.     set a ""
  1194.     update
  1195.     foreach i {0 1 2} {
  1196. lappend a [winfo width .$i]-[winfo height .$i]
  1197.     }
  1198.     set a
  1199. } {100-75 100-75 100-75}
  1200. grid_reset 16.5
  1201. test grid-16.6 {layout weights (shrinking at minsize)} {
  1202.     foreach i {0 1 2} {
  1203.      frame .$i -bg gray  -width 100 -height 75 -bd 2 -relief ridge
  1204.      grid .$i -row $i -column $i -sticky nswe
  1205.      grid rowconfigure . $i -weight [expr $i + 1] -minsize 52
  1206.      grid columnconfigure . $i -weight [expr $i + 1] -minsize 69
  1207.     }
  1208.     grid propagate . 0
  1209.     . configure -width 200 -height 150
  1210.     set a ""
  1211.     update
  1212.     foreach i {0 1 2} {
  1213. lappend a [winfo width .$i]-[winfo height .$i]
  1214.     }
  1215.     set a
  1216. } {69-52 69-52 69-52}
  1217. grid_reset 16.6
  1218. test grid-16.7 {layout weights (shrinking at minsize)} {
  1219.     foreach i {0 1 2} {
  1220.      frame .$i -bg gray  -width 100 -height 75 -bd 2 -relief ridge
  1221.      grid .$i -row $i -column $i -sticky nswe
  1222.     }
  1223.     grid propagate . 0
  1224.     grid columnconfigure . 1 -weight 1 -minsize 0
  1225.     grid rowconfigure . 1 -weight 1 -minsize 0
  1226.     . configure -width 100 -height 75
  1227.     set a ""
  1228.     update
  1229.     foreach i {0 1 2} {
  1230. lappend a [winfo width .$i]-[winfo height .$i]-[winfo ismapped .$i]
  1231.     }
  1232.     set a
  1233. } {100-75-1 1-1-0 100-75-1}
  1234. grid_reset 16.7
  1235. test grid-16.8 {layout internal constraints} {
  1236.     foreach i {0 1 2 3 4} {
  1237.      frame .$i -bg gray  -width 30 -height 25 -bd 2 -relief ridge
  1238.      grid .$i -row $i -column $i -sticky nswe
  1239.     }
  1240.     frame .f -bg red -width 250 -height 200
  1241.     frame .g -bg green -width 200 -height 180
  1242.     lower .f
  1243.     raise .g .f
  1244.     grid .f -row 1 -column 1 -rowspan 3 -columnspan 3 -sticky nswe
  1245.     grid .g -row 1 -column 1 -rowspan 2 -columnspan 2 -sticky nswe
  1246.     update
  1247.     set a ""
  1248.     foreach i {0 1 2 3 4} {
  1249.      append a "[winfo x .$i] "
  1250.     }
  1251.     append a ", "
  1252.     grid remove .f
  1253.     update
  1254.     foreach i {0 1 2 3 4} {
  1255.      append a "[winfo x .$i] "
  1256.     }
  1257.     append a ", "
  1258.     grid remove .g
  1259.     grid .f
  1260.     update
  1261.     foreach i {0 1 2 3 4} {
  1262.      append a "[winfo x .$i] "
  1263.     }
  1264.     append a ", "
  1265.     grid remove .f
  1266.     update
  1267.     foreach i {0 1 2 3 4} {
  1268.      append a "[winfo x .$i] "
  1269.     }
  1270.     set a
  1271. } {0 30 70 250 280 , 0 30 130 230 260 , 0 30 113 197 280 , 0 30 60 90 120 }
  1272. grid_reset 16.8
  1273. test grid-16.9 {layout uniform} {
  1274.     frame .f1 -width 75 -height 50
  1275.     frame .f2 -width 60 -height 25
  1276.     frame .f3 -width 95 -height 75
  1277.     frame .f4 -width 135 -height 100
  1278.     frame .f5 -width 80 -height 40
  1279.     for {set t 1} {$t <= 5} {incr t} {
  1280.         grid .f$t
  1281.     }
  1282.     grid rowconfigure . {0 2} -uniform a
  1283.     grid rowconfigure . {1 3} -uniform b
  1284.     update
  1285.     list [grid bbox . 0 0] [grid bbox . 0 1] [grid bbox . 0 2] 
  1286.             [grid bbox . 0 3] [grid bbox . 0 4]
  1287. } {{0 0 135 75} {0 75 135 100} {0 175 135 75} {0 250 135 100} {0 350 135 40}}
  1288. grid_reset 16.9
  1289. test grid-16.10 {layout uniform} {
  1290.     grid [frame .f1 -width  75 -height  50] -row 0 -column 0
  1291.     grid [frame .f2 -width  60 -height  30] -row 1 -column 2
  1292.     grid [frame .f3 -width  95 -height  90] -row 2 -column 1
  1293.     grid [frame .f4 -width  60 -height 100] -row 3 -column 4
  1294.     grid [frame .f5 -width  60 -height  40] -row 4 -column 3
  1295.     grid rowconfigure . {0 1} -uniform a
  1296.     grid rowconfigure . {2 4} -uniform b
  1297.     grid rowconfigure . {0 2} -weight 2
  1298.     grid columnconfigure . {0 2} -uniform a
  1299.     grid columnconfigure . {3 4} -uniform b
  1300.     grid columnconfigure . {2 4} -weight 2
  1301.     grid columnconfigure . 3 -minsize 70
  1302.     grid columnconfigure . 4 -minsize 130
  1303.     update
  1304.     list [grid bbox . 0 0] [grid bbox . 2 1] [grid bbox . 1 2] 
  1305.             [grid bbox . 4 3] [grid bbox . 3 4]
  1306. } {{0 0 75 60} {170 60 150 30} {75 90 95 90} {390 180 140 100} {320 280 70 45}}
  1307. grid_reset 16.10
  1308. test grid-16.11 {layout uniform (shrink)} {
  1309.     frame .f1 -width 75 -height 50
  1310.     frame .f2 -width 100 -height 95
  1311.     grid .f1 .f2 -sticky news
  1312.     grid columnconfigure . {0 1} -uniform a
  1313.     grid columnconfigure . 0 -weight 1
  1314.     update
  1315.     set res {}
  1316.     lappend res [grid bbox . 0 0] [grid bbox . 1 0]
  1317.     grid propagate . 0
  1318.     . configure -width 150 -height 95
  1319.     update
  1320.     lappend res [grid bbox . 0 0] [grid bbox . 1 0]
  1321. } {{0 0 100 95} {100 0 100 95} {0 0 50 95} {50 0 100 95}}
  1322. grid_reset 16.11
  1323. test grid-16.12 {layout uniform (grow)} {
  1324.     frame .f1 -width 40 -height 50
  1325.     frame .f2 -width 50 -height 95
  1326.     frame .f3 -width 60 -height 50
  1327.     frame .f4 -width 70 -height 95
  1328.     grid .f1 .f2 .f3 .f4 -sticky news
  1329.     grid columnconfigure . {0 1 2} -uniform a
  1330.     # Put weight 2 on the biggest in the group to see that the groups
  1331.     # adapts to one of the smaller.
  1332.     grid columnconfigure . 2 -weight 2
  1333.     grid columnconfigure . {0 3} -weight 1
  1334.     update
  1335.     set res {}
  1336.     lappend res [grid bbox . 0 0] [grid bbox . 1 0]
  1337.     lappend res [grid bbox . 2 0] [grid bbox . 3 0]
  1338.     grid propagate . 0
  1339.     . configure -width 350 -height 95
  1340.     update
  1341.     lappend res [grid bbox . 0 0] [grid bbox . 1 0]
  1342.     lappend res [grid bbox . 2 0] [grid bbox . 3 0]
  1343. } [list {0 0 50 95} {50 0 50 95} {100 0 100 95} {200 0 70 95} 
  1344.         {0 0 70 95} {70 0 50 95} {120 0 140 95} {260 0 90 95}]
  1345. grid_reset 16.12
  1346. test grid-16.13 {layout weights (shrinking at minsize)} {
  1347.     foreach i {0 1 2 3} {
  1348.      frame .$i -bg gray  -width 100 -height 75 -bd 2 -relief ridge
  1349.      grid .$i -row $i -column $i -sticky nswe
  1350.     }
  1351.     grid propagate . 0
  1352.     grid columnconfigure . {0 1} -weight 1 -minsize 0
  1353.     grid rowconfigure . {0 1} -weight 1 -minsize 0
  1354.     set a ""
  1355.     . configure -width 250 -height 200
  1356.     update
  1357.     foreach i {0 1 2 3} {
  1358. lappend a [winfo width .$i]-[winfo height .$i]-[winfo ismapped .$i]
  1359.     }
  1360.     . configure -width 150 -height 100
  1361.     update
  1362.     foreach i {0 1 2 3} {
  1363. lappend a [winfo width .$i]-[winfo height .$i]-[winfo ismapped .$i]
  1364.     }
  1365.     set a
  1366. } {25-25-1 25-25-1 100-75-1 100-75-1 25-25-0 25-25-0 100-75-1 100-75-1}
  1367. grid_reset 16.13
  1368. test grid-17.1 {forget and pending idle handlers} {
  1369.     # This test is intended to detect a crash caused by a failure to remove
  1370.     # pending idle handlers when grid forget is invoked.
  1371.     toplevel .t
  1372.     wm geometry .t +0+0
  1373.     frame .t.f
  1374.     label .t.f.l -text foobar
  1375.     grid .t.f.l
  1376.     grid .t.f
  1377.     update
  1378.     grid forget .t.f.l
  1379.     grid forget .t.f
  1380.     destroy .t
  1381.     toplevel .t
  1382.     frame .t.f
  1383.     label .t.f.l -text foobar
  1384.     grid .t.f.l
  1385.     destroy .t
  1386.     set result ok
  1387. } ok
  1388. test grid-18.1 {test respect for internalborder} {
  1389.     toplevel .pack
  1390.     wm geometry .pack 200x200
  1391.     frame .pack.l -width 15 -height 10
  1392.     labelframe .pack.lf -labelwidget .pack.l
  1393.     pack .pack.lf -fill both -expand 1
  1394.     frame .pack.lf.f
  1395.     grid .pack.lf.f -sticky news
  1396.     grid columnconfigure .pack.lf 0 -weight 1
  1397.     grid rowconfigure .pack.lf 0 -weight 1
  1398.     update
  1399.     set res [list [winfo geometry .pack.lf.f]]
  1400.     .pack.lf configure -labelanchor e -padx 3 -pady 5
  1401.     update
  1402.     lappend res [winfo geometry .pack.lf.f]
  1403.     destroy .pack
  1404.     set res
  1405. } {196x188+2+10 177x186+5+7}
  1406. test grid-18.2 {test support for minreqsize} {
  1407.     toplevel .pack
  1408.     wm geometry .pack {}
  1409.     frame .pack.l -width 150 -height 100
  1410.     labelframe .pack.lf -labelwidget .pack.l
  1411.     pack .pack.lf -fill both -expand 1
  1412.     frame .pack.lf.f -width 20 -height 25
  1413.     grid .pack.lf.f
  1414.     update
  1415.     set res [list [winfo geometry .pack.lf]]
  1416.     .pack.lf configure -labelanchor ws
  1417.     update
  1418.     lappend res [winfo geometry .pack.lf]
  1419.     destroy .pack
  1420.     set res
  1421. } {162x127+0+0 172x112+0+0}
  1422. test grid-19.1 {uniform realloc} {
  1423.     # Use a lot of uniform groups to test the reallocation mechanism
  1424.     for {set t 0} {$t < 100} {incr t 2} {
  1425.         frame .fa$t -width 5 -height 20
  1426.         frame .fb$t -width 6 -height 20
  1427.         grid .fa$t .fb$t -row 0 -column $t -sticky news
  1428.         grid columnconfigure . [list $t [expr {$t + 1}]] -uniform a$t
  1429.     }
  1430.     update
  1431.     grid bbox .
  1432. } {0 0 600 20}
  1433. grid_reset 19.1
  1434. test grid-20.1 {recalculate size after removal (destroy)} {
  1435.     label .l1 -text l1
  1436.     grid .l1 -row 2 -column 2
  1437.     destroy .l1
  1438.     label .l2 -text l2
  1439.     grid .l2
  1440.     grid size .
  1441. } {1 1}
  1442. grid_reset 20.1
  1443. test grid-20.2 {recalculate size after removal (forget)} {
  1444.     label .l1 -text l1
  1445.     grid .l1 -row 2 -column 2
  1446.     grid forget .l1
  1447.     label .l2 -text l2
  1448.     grid .l2
  1449.     grid size .
  1450. } {1 1}
  1451. grid_reset 20.2
  1452. # cleanup
  1453. ::tcltest::cleanupTests
  1454. return