home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / tcl / tk3.3b1 / tests / pack.test < prev    next >
Encoding:
Text File  |  1993-07-10  |  30.5 KB  |  815 lines

  1. # This file is a Tcl script to test out the "pack" command
  2. # of Tk.  It is organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1993 The Regents of the University of California.
  5. # All rights reserved.
  6. #
  7. # Permission is hereby granted, without written agreement and without
  8. # license or royalty fees, to use, copy, modify, and distribute this
  9. # software and its documentation for any purpose, provided that the
  10. # above copyright notice and the following two paragraphs appear in
  11. # all copies of this software.
  12. #
  13. # IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
  14. # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  15. # OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
  16. # CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  17. #
  18. # THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  19. # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  20. # AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  21. # ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
  22. # PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  23. #
  24. # $Header: /user6/ouster/wish/tests/RCS/pack.test,v 1.14 93/07/10 14:53:53 ouster Exp $ (Berkeley)
  25.  
  26. if {[string compare test [info procs test]] == 1} then \
  27.   {source defs}
  28.  
  29. # Utility procedures:
  30.  
  31. proc pack1 {args} {
  32.     pack forget .pack.a .pack.b .pack.c .pack.d
  33.     eval pack .pack.a $args
  34.     pack .pack.b -expand yes -fill both
  35.     update
  36.     list [winfo geometry .pack.a] [winfo geometry .pack.b]
  37. }
  38. proc pack2 {args} {
  39.     pack forget .pack.a .pack.b .pack.c .pack.d
  40.     eval pack .pack.a $args
  41.     update
  42.     winfo geometry .pack.a
  43. }
  44. proc pack3 {args} {
  45.     pack forget .pack.a .pack.b .pack.c .pack.d
  46.     pack .pack.a -side  top
  47.     pack .pack.c -side left
  48.     eval pack .pack.b $args
  49.     update
  50.     winfo geometry .pack.b
  51. }
  52. proc pack4 {option value} {
  53.     pack forget .pack.a .pack.b .pack.c .pack.d
  54.     pack .pack.a $option $value
  55.     set i [pack newinfo .pack.a]
  56.     lindex $i [expr [lsearch -exact $i $option]+1]
  57. }
  58.  
  59. # Create some test windows.
  60.  
  61. catch {destroy .pack}
  62. toplevel .pack
  63. wm geom .pack 300x200+0+0
  64. wm minsize .pack 1 1
  65. update idletasks
  66. foreach i {a b c d} {
  67.     frame .pack.$i
  68.     label .pack.$i.label -text $i -relief raised
  69.     place .pack.$i.label -relwidth 1.0 -relheight 1.0
  70. }
  71. .pack.a config -width 20 -height 40
  72. .pack.b config -width 50 -height 30
  73. .pack.c config -width 80 -height 80
  74. .pack.d config -width 40 -height 30
  75.  
  76. test pack-1.1 {-side option} {
  77.     pack1 -side top
  78. } {20x40+140+0 300x160+0+40}
  79. test pack-1.2 {-side option} {
  80.     pack1 -side bottom
  81. } {20x40+140+160 300x160+0+0}
  82. test pack-1.3 {-side option} {
  83.     pack1 -side left
  84. } {20x40+0+80 280x200+20+0}
  85. test pack-1.4 {-side option} {
  86.     pack1 -side right
  87. } {20x40+280+80 280x200+0+0}
  88.  
  89. test pack-2.1 {x padding and filling} {
  90.     pack1 -side right -padx 20
  91. } {20x40+260+80 240x200+0+0}
  92. test pack-2.2 {x padding and filling} {
  93.     pack1 -side right -ipadx 20
  94. } {60x40+240+80 240x200+0+0}
  95. test pack-2.3 {x padding and filling} {
  96.     pack1 -side right -ipadx 5 -padx 10
  97. } {30x40+260+80 250x200+0+0}
  98. test pack-2.4 {x padding and filling} {
  99.     pack1 -side right -padx 20 -fill x
  100. } {20x40+260+80 240x200+0+0}
  101. test pack-2.5 {x padding and filling} {
  102.     pack1 -side right -ipadx 20 -fill x
  103. } {60x40+240+80 240x200+0+0}
  104. test pack-2.6 {x padding and filling} {
  105.     pack1 -side right -ipadx 5 -padx 10 -fill x
  106. } {30x40+260+80 250x200+0+0}
  107. test pack-2.7 {x padding and filling} {
  108.     pack1 -side top -padx 20
  109. } {20x40+140+0 300x160+0+40}
  110. test pack-2.8 {x padding and filling} {
  111.     pack1 -side top -ipadx 20
  112. } {60x40+120+0 300x160+0+40}
  113. test pack-2.9 {x padding and filling} {
  114.     pack1 -side top -ipadx 5 -padx 10
  115. } {30x40+135+0 300x160+0+40}
  116. test pack-2.10 {x padding and filling} {
  117.     pack1 -side top -padx 20 -fill x
  118. } {260x40+20+0 300x160+0+40}
  119. test pack-2.11 {x padding and filling} {
  120.     pack1 -side top -ipadx 20 -fill x
  121. } {300x40+0+0 300x160+0+40}
  122. test pack-2.12 {x padding and filling} {
  123.     pack1 -side top -ipadx 5 -padx 10 -fill x
  124. } {280x40+10+0 300x160+0+40}
  125. set pad [winfo pixels .pack 1c]
  126. test pack-2.13 {x padding and filling} {
  127.     pack forget .pack.a .pack.b .pack.c .pack.d
  128.     pack .pack.a -padx 1c
  129.     set x [pack newinfo .pack.a]
  130.     lindex $x [expr [lsearch -exact $x -padx]+1]
  131. } $pad
  132. test pack-2.14 {x padding and filling} {
  133.     pack forget .pack.a .pack.b .pack.c .pack.d
  134.     pack .pack.a -ipadx 1c
  135.     set x [pack newinfo .pack.a]
  136.     lindex $x [expr [lsearch -exact $x -ipadx]+1]
  137. } $pad
  138.  
  139. test pack-3.1 {y padding and filling} {
  140.     pack1 -side right -pady 20
  141. } {20x40+280+80 280x200+0+0}
  142. test pack-3.2 {y padding and filling} {
  143.     pack1 -side right -ipady 20
  144. } {20x80+280+60 280x200+0+0}
  145. test pack-3.3 {y padding and filling} {
  146.     pack1 -side right -ipady 5 -pady 10
  147. } {20x50+280+75 280x200+0+0}
  148. test pack-3.4 {y padding and filling} {
  149.     pack1 -side right -pady 20 -fill y
  150. } {20x160+280+20 280x200+0+0}
  151. test pack-3.5 {y padding and filling} {
  152.     pack1 -side right -ipady 20 -fill y
  153. } {20x200+280+0 280x200+0+0}
  154. test pack-3.6 {y padding and filling} {
  155.     pack1 -side right -ipady 5 -pady 10 -fill y
  156. } {20x180+280+10 280x200+0+0}
  157. test pack-3.7 {y padding and filling} {
  158.     pack1 -side top -pady 20
  159. } {20x40+140+20 300x120+0+80}
  160. test pack-3.8 {y padding and filling} {
  161.     pack1 -side top -ipady 20
  162. } {20x80+140+0 300x120+0+80}
  163. test pack-3.9 {y padding and filling} {
  164.     pack1 -side top -ipady 5 -pady 10
  165. } {20x50+140+10 300x130+0+70}
  166. test pack-3.10 {y padding and filling} {
  167.     pack1 -side top -pady 20 -fill y
  168. } {20x40+140+20 300x120+0+80}
  169. test pack-3.11 {y padding and filling} {
  170.     pack1 -side top -ipady 20 -fill y
  171. } {20x80+140+0 300x120+0+80}
  172. test pack-3.12 {y padding and filling} {
  173.     pack1 -side top -ipady 5 -pady 10 -fill y
  174. } {20x50+140+10 300x130+0+70}
  175. set pad [winfo pixels .pack 1c]
  176. test pack-3.13 {y padding and filling} {
  177.     pack forget .pack.a .pack.b .pack.c .pack.d
  178.     pack .pack.a -pady 1c
  179.     set x [pack newinfo .pack.a]
  180.     lindex $x [expr [lsearch -exact $x -pady]+1]
  181. } $pad
  182. test pack-3.14 {y padding and filling} {
  183.     pack forget .pack.a .pack.b .pack.c .pack.d
  184.     pack .pack.a -ipady 1c
  185.     set x [pack newinfo .pack.a]
  186.     lindex $x [expr [lsearch -exact $x -ipady]+1]
  187. } $pad
  188.  
  189. test pack-4.1 {anchors} {
  190.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor n
  191. } {30x70+135+20}
  192. test pack-4.2 {anchors} {
  193.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor ne
  194. } {30x70+260+20}
  195. test pack-4.3 {anchors} {
  196.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor e
  197. } {30x70+260+65}
  198. test pack-4.4 {anchors} {
  199.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor se
  200. } {30x70+260+110}
  201. test pack-4.5 {anchors} {
  202.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor s
  203. } {30x70+135+110}
  204. test pack-4.6 {anchors} {
  205.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor sw
  206. } {30x70+10+110}
  207. test pack-4.7 {anchors} {
  208.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor w
  209. } {30x70+10+65}
  210. test pack-4.8 {anchors} {
  211.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor nw
  212. } {30x70+10+20}
  213. test pack-4.9 {anchors} {
  214.     pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor center
  215. } {30x70+135+65}
  216.  
  217. # Repeat above tests, but with a frame that isn't at (0,0), so that
  218. # we can be sure that the frame offset is being added in correctly.
  219.  
  220. test pack-5.1 {more anchors} {
  221.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor n
  222. } {60x60+160+60}
  223. test pack-5.2 {more anchors} {
  224.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor ne
  225. } {60x60+230+60}
  226. test pack-5.3 {more anchors} {
  227.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor e
  228. } {60x60+230+90}
  229. test pack-5.4 {more anchors} {
  230.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor se
  231. } {60x60+230+120}
  232. test pack-5.5 {more anchors} {
  233.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor s
  234. } {60x60+160+120}
  235. test pack-5.6 {more anchors} {
  236.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor sw
  237. } {60x60+90+120}
  238. test pack-5.7 {more anchors} {
  239.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor w
  240. } {60x60+90+90}
  241. test pack-5.8 {more anchors} {
  242.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor nw
  243. } {60x60+90+60}
  244. test pack-5.9 {more anchors} {
  245.     pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor center
  246. } {60x60+160+90}
  247.  
  248. test pack-6.1 {-expand option} {
  249.     pack forget .pack.a .pack.b .pack.c .pack.d
  250.     pack .pack.a .pack.b .pack.c .pack.d -side left
  251.     update
  252.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  253.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  254. } {20x40+0+80 50x30+20+85 80x80+70+60 40x30+150+85}
  255. test pack-6.2 {-expand option} {
  256.     pack forget .pack.a .pack.b .pack.c .pack.d
  257.     pack .pack.a -side left -expand yes
  258.     pack .pack.b -side left
  259.     pack .pack.c .pack.d -side left -expand 1
  260.     update
  261.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  262.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  263. } {20x40+18+80 50x30+56+85 80x80+124+60 40x30+241+85}
  264. test pack-6.3 {-expand option} {
  265.     pack forget .pack.a .pack.b .pack.c .pack.d
  266.     pack .pack.a .pack.b .pack.c .pack.d -side top
  267.     update
  268.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  269.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  270. } {20x40+140+0 50x30+125+40 80x80+110+70 40x30+130+150}
  271. test pack-6.4 {-expand option} {
  272.     pack forget .pack.a .pack.b .pack.c .pack.d
  273.     pack .pack.a -side top -expand yes
  274.     pack .pack.b -side top
  275.     pack .pack.c .pack.d -side top -expand 1
  276.     update
  277.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  278.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  279. } {20x40+140+3 50x30+125+46 80x80+110+79 40x30+130+166}
  280. test pack-6.5 {-expand option} {
  281.     pack forget .pack.a .pack.b .pack.c .pack.d
  282.     pack .pack.a .pack.b .pack.c .pack.d -side right
  283.     update
  284.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  285.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  286. } {20x40+280+80 50x30+230+85 80x80+150+60 40x30+110+85}
  287. test pack-6.6 {-expand option} {
  288.     pack forget .pack.a .pack.b .pack.c .pack.d
  289.     pack .pack.a -side right -expand yes
  290.     pack .pack.b -side right
  291.     pack .pack.c .pack.d -side right -expand 1
  292.     update
  293.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  294.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  295. } {20x40+262+80 50x30+194+85 80x80+95+60 40x30+18+85}
  296. test pack-6.7 {-expand option} {
  297.     pack forget .pack.a .pack.b .pack.c .pack.d
  298.     pack .pack.a .pack.b .pack.c .pack.d -side bottom
  299.     update
  300.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  301.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  302. } {20x40+140+160 50x30+125+130 80x80+110+50 40x30+130+20}
  303. test pack-6.8 {-expand option} {
  304.     pack forget .pack.a .pack.b .pack.c .pack.d
  305.     pack .pack.a -side bottom -expand yes
  306.     pack .pack.b -side bottom
  307.     pack .pack.c .pack.d -side bottom -expand 1
  308.     update
  309.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  310.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  311. } {20x40+140+157 50x30+125+124 80x80+110+40 40x30+130+3}
  312. test pack-6.9 {-expand option} {
  313.     pack forget .pack.a .pack.b .pack.c .pack.d
  314.     pack .pack.a -side bottom -expand yes -fill both
  315.     pack .pack.b -side right
  316.     pack .pack.c -side top -expand 1 -fill both
  317.     pack .pack.d -side left
  318.     update
  319.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  320.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  321. } {300x65+0+135 50x30+250+52 250x105+0+0 40x30+0+105}
  322. test pack-6.10 {-expand option} {
  323.     pack forget .pack.a .pack.b .pack.c .pack.d
  324.     pack .pack.a -side left -expand yes -fill both
  325.     pack .pack.b -side top
  326.     pack .pack.c -side right -expand 1 -fill both
  327.     pack .pack.d -side bottom
  328.     update
  329.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  330.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  331. } {100x200+0+0 50x30+175+0 160x170+140+30 40x30+100+170}
  332. test pack-6.11 {-expand option} {
  333.     pack forget .pack.a .pack.b .pack.c .pack.d
  334.     pack .pack.a -side left -expand yes -fill both
  335.     pack .pack.b -side top -expand yes -fill both
  336.     pack .pack.c -side right -expand 1 -fill both
  337.     pack .pack.d -side bottom -expand yes -fill both
  338.     update
  339.     list [winfo geometry .pack.a] [winfo geometry .pack.b] \
  340.         [winfo geometry .pack.c] [winfo geometry .pack.d]
  341. } {100x200+0+0 200x100+100+0 160x100+140+100 40x100+100+100}
  342. catch {destroy .pack2}
  343. toplevel .pack2 -height 400 -width 400
  344. wm geometry .pack2 +0+0
  345. pack propagate .pack2 0
  346. pack forget .pack2.a .pack2.b .pack2.c .pack2.d
  347. foreach i {w1 w2 w3} {
  348.     frame .pack2.$i -width 30 -height 30 -bd 2 -relief raised
  349.     label .pack2.$i.l -text $i
  350.     place .pack2.$i.l -relwidth 1.0 -relheight 1.0
  351. }
  352. test pack-6.11 {-expand option} {
  353.     pack .pack2.w1 .pack2.w2 .pack2.w3 -padx 5 -ipadx 4 -pady 2 -ipady 6 -expand 1 -side left
  354.     update
  355.     list [winfo geometry .pack2.w1] [winfo geometry .pack2.w2] [winfo geometry .pack2.w3]
  356. } {38x42+47+179 38x42+180+179 38x42+314+179}
  357. test pack-6.12 {-expand option} {
  358.     pack forget .pack2.w1 .pack2.w2 .pack2.w3
  359.     pack .pack2.w1 .pack2.w2 .pack2.w3 -padx 5 -ipadx 4 -pady 2 \
  360.         -ipady 6 -expand 1 -side top
  361.     update
  362.     list [winfo geometry .pack2.w1] [winfo geometry .pack2.w2] [winfo geometry .pack2.w3]
  363. } {38x42+181+45 38x42+181+178 38x42+181+312}
  364. catch {destroy .pack2}
  365.  
  366. wm geometry .pack {}
  367. test pack-7.1 {requesting size for parent} {
  368.     pack forget .pack.a .pack.b .pack.c .pack.d
  369.     pack .pack.a .pack.b .pack.c .pack.d -side left -padx 5 -pady 10
  370.     update
  371.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  372. } {230 100}
  373. test pack-7.2 {requesting size for parent} {
  374.     pack forget .pack.a .pack.b .pack.c .pack.d
  375.     pack .pack.a .pack.b .pack.c .pack.d -side top -padx 5 -pady 10
  376.     update
  377.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  378. } {90 260}
  379. test pack-7.3 {requesting size for parent} {
  380.     pack forget .pack.a .pack.b .pack.c .pack.d
  381.     pack .pack.a .pack.b .pack.c .pack.d -side right -padx 5 -pady 10
  382.     update
  383.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  384. } {230 100}
  385. test pack-7.4 {requesting size for parent} {
  386.     pack forget .pack.a .pack.b .pack.c .pack.d
  387.     pack .pack.a .pack.b .pack.c .pack.d -side bottom -padx 5 -pady 10
  388.     update
  389.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  390. } {90 260}
  391. test pack-7.5 {requesting size for parent} {
  392.     pack forget .pack.a .pack.b .pack.c .pack.d
  393.     pack .pack.a -side top -padx 5 -pady 10
  394.     pack .pack.b -side right -padx 5 -pady 10
  395.     pack .pack.c -side bottom -padx 5 -pady 10
  396.     pack .pack.d -side left -padx 5 -pady 10
  397.     update
  398.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  399. } {150 210}
  400. test pack-7.6 {requesting size for parent} {
  401.     pack forget .pack.a .pack.b .pack.c .pack.d
  402.     pack .pack.a -side top
  403.     pack .pack.c -side left
  404.     pack .pack.d -side bottom
  405.     update
  406.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  407. } {120 120}
  408. test pack-7.7 {requesting size for parent} {
  409.     pack forget .pack.a .pack.b .pack.c .pack.d
  410.     pack .pack.a -side right
  411.     pack .pack.c -side bottom
  412.     pack .pack.d -side top
  413.     update
  414.     list [winfo reqwidth .pack] [winfo reqheight .pack]
  415. } {100 110}
  416.  
  417.  
  418. # For the tests below, create a couple of "pad" windows to shrink
  419. # the available space for the remaining windows.  The tests have to
  420. # be done this way rather than shrinking the whole window, because
  421. # some window managers like mwm won't let a top-level window get
  422. # very small.
  423.  
  424. pack forget .pack.a .pack.b .pack.c .pack.d
  425. frame .pack.right -width 200 -height 10 -bd 2 -relief raised
  426. frame .pack.bottom -width 10 -height 150 -bd 2 -relief raised
  427. pack .pack.right -side right
  428. pack .pack.bottom -side bottom
  429. pack .pack.a .pack.b .pack.c -side top
  430. update
  431. test pack-8.1 {insufficient space} {
  432.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  433.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  434.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  435. } {20x40+30+0 1 50x30+15+40 1 80x80+0+70 1}
  436. wm geom .pack 270x250
  437. update
  438. test pack-8.2 {insufficient space} {
  439.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  440.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  441.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  442. } {20x40+25+0 1 50x30+10+40 1 70x30+0+70 1}
  443. wm geom .pack 240x220
  444. update
  445. test pack-8.3 {insufficient space} {
  446.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  447.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  448.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  449. } {20x40+10+0 1 40x30+0+40 1 70x30+0+70 0}
  450. wm geom .pack 350x350
  451. update
  452. test pack-8.4 {insufficient space} {
  453.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  454.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  455.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  456. } {20x40+65+0 1 50x30+50+40 1 80x80+35+70 1}
  457. wm geom .pack {}
  458. pack .pack.a -side left
  459. pack .pack.b -side right
  460. pack .pack.c -side left
  461. update
  462. test pack-8.5 {insufficient space} {
  463.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  464.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  465.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  466. } {20x40+0+20 1 50x30+100+25 1 80x80+20+0 1}
  467. wm geom .pack 320x180
  468. update
  469. test pack-8.6 {insufficient space} {
  470.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  471.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  472.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  473. } {20x30+0+0 1 50x30+70+0 1 50x30+20+0 1}
  474. wm geom .pack 250x180
  475. update
  476. test pack-8.7 {insufficient space} {
  477.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  478.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  479.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  480. } {20x30+0+0 1 30x30+20+0 1 50x30+20+0 0}
  481. pack forget .pack.b
  482. update
  483. test pack-8.8 {insufficient space} {
  484.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  485.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  486.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  487. } {20x30+0+0 1 30x30+20+0 0 30x30+20+0 1}
  488. pack .pack.b -side right -after .pack.a
  489. wm geom .pack {}
  490. update
  491. test pack-8.9 {insufficient space} {
  492.     list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
  493.         [winfo geometry .pack.b] [winfo ismapped .pack.b] \
  494.         [winfo geometry .pack.c] [winfo ismapped .pack.c]
  495. } {20x40+0+20 1 50x30+100+25 1 80x80+20+0 1}
  496. pack forget .pack.right .pack.bottom
  497.  
  498. test pack-10.1 {window ordering} {
  499.     pack forget .pack.a .pack.b .pack.c .pack.d
  500.     pack .pack.a .pack.b .pack.c .pack.d -side top
  501.     pack .pack.a -after .pack.b
  502.     pack slaves .pack
  503. } {.pack.b .pack.a .pack.c .pack.d}
  504. test pack-10.2 {window ordering} {
  505.     pack forget .pack.a .pack.b .pack.c .pack.d
  506.     pack .pack.a .pack.b .pack.c .pack.d -side top
  507.     pack .pack.a -after .pack.a
  508.     pack slaves .pack
  509. } {.pack.a .pack.b .pack.c .pack.d}
  510. test pack-10.3 {window ordering} {
  511.     pack forget .pack.a .pack.b .pack.c .pack.d
  512.     pack .pack.a .pack.b .pack.c .pack.d -side top
  513.     pack .pack.a -before .pack.d
  514.     pack slaves .pack
  515. } {.pack.b .pack.c .pack.a .pack.d}
  516. test pack-10.4 {window ordering} {
  517.     pack forget .pack.a .pack.b .pack.c .pack.d
  518.     pack .pack.a .pack.b .pack.c .pack.d -side top
  519.     pack .pack.d -before .pack.a
  520.     pack slaves .pack
  521. } {.pack.d .pack.a .pack.b .pack.c}
  522. test pack-10.5 {window ordering} {
  523.     pack forget .pack.a .pack.b .pack.c .pack.d
  524.     pack .pack.a .pack.b .pack.c .pack.d -side top
  525.     pack propagate .pack.c 0
  526.     pack .pack.a -in .pack.c
  527.     list [pack slaves .pack] [pack slaves .pack.c]
  528. } {{.pack.b .pack.c .pack.d} .pack.a}
  529. test pack-10.6 {window ordering} {
  530.     pack forget .pack.a .pack.b .pack.c .pack.d
  531.     pack .pack.a .pack.b .pack.c .pack.d -side top
  532.     pack .pack.a -in .pack
  533.     pack slaves .pack
  534. } {.pack.b .pack.c .pack.d .pack.a}
  535. test pack-10.7 {window ordering} {
  536.     pack forget .pack.a .pack.b .pack.c .pack.d
  537.     pack .pack.a .pack.b .pack.c .pack.d -side top
  538.     pack .pack.a -padx 0
  539.     pack slaves .pack
  540. } {.pack.a .pack.b .pack.c .pack.d}
  541. test pack-10.8 {window ordering} {
  542.     pack forget .pack.a .pack.b .pack.c .pack.d
  543.     pack .pack.a .pack.b .pack.c
  544.     pack .pack.d
  545.     pack slaves .pack
  546. } {.pack.a .pack.b .pack.c .pack.d}
  547. test pack-10.9 {window ordering} {
  548.     pack forget .pack.a .pack.b .pack.c .pack.d
  549.     pack .pack.a .pack.b .pack.c .pack.d
  550.     pack .pack.b .pack.d .pack.c -before .pack.a
  551.     pack slaves .pack
  552. } {.pack.b .pack.d .pack.c .pack.a}
  553. test pack-10.10 {window ordering} {
  554.     pack forget .pack.a .pack.b .pack.c .pack.d
  555.     pack .pack.a .pack.b .pack.c .pack.d
  556.     pack .pack.a .pack.c .pack.d .pack.b -after .pack.a
  557.     pack slaves .pack
  558. } {.pack.a .pack.c .pack.d .pack.b}
  559.  
  560. test pack-11.1 {retaining/clearing configuration state} {
  561.     pack forget .pack.a .pack.b .pack.c .pack.d
  562.     pack .pack.a -side bottom -anchor n -padx 1 -pady 2 -ipadx 3 -ipady 4 \
  563.     -fill both -expand 1
  564.     pack forget .pack.a
  565.     pack .pack.a
  566.     pack newinfo .pack.a
  567. } {-in .pack -anchor center -expand 0 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top}
  568. test pack-11.2 {retaining/clearing configuration state} {
  569.     pack forget .pack.a .pack.b .pack.c .pack.d
  570.     pack .pack.a -side bottom -anchor n -padx 1 -pady 2 -ipadx 3 -ipady 4 \
  571.     -fill both -expand 1
  572.     pack .pack.a -pady 14
  573.     pack newinfo .pack.a
  574. } {-in .pack -anchor n -expand 1 -fill both -ipadx 3 -ipady 4 -padx 1 -pady 14 -side bottom}
  575.  
  576. test pack-12.1 {info option} {
  577.     pack4 -in .pack
  578. } .pack
  579. test pack-12.2 {info option} {
  580.     pack4 -anchor n
  581. } n
  582. test pack-12.3 {info option} {
  583.     pack4 -anchor sw
  584. } sw
  585. test pack-12.4 {info option} {
  586.     pack4 -expand yes
  587. } 1
  588. test pack-12.5 {info option} {
  589.     pack4 -expand no
  590. } 0
  591. test pack-12.6 {info option} {
  592.     pack4 -fill x
  593. } x
  594. test pack-12.7 {info option} {
  595.     pack4 -fill y
  596. } y
  597. test pack-12.8 {info option} {
  598.     pack4 -fill both
  599. } both
  600. test pack-12.9 {info option} {
  601.     pack4 -fill none
  602. } none
  603. test pack-12.10 {info option} {
  604.     pack4 -ipadx 14
  605. } 14
  606. test pack-12.11 {info option} {
  607.     pack4 -ipady 22
  608. } 22
  609. test pack-12.12 {info option} {
  610.     pack4 -padx 2
  611. } 2
  612. test pack-12.13 {info option} {
  613.     pack4 -pady 3
  614. } 3
  615. test pack-12.14 {info option} {
  616.     pack4 -side top
  617. } top
  618. test pack-12.15 {info option} {
  619.     pack4 -side bottom
  620. } bottom
  621. test pack-12.16 {info option} {
  622.     pack4 -side left
  623. } left
  624. test pack-12.17 {info option} {
  625.     pack4 -side right
  626. } right
  627.  
  628. test pack-13.1 {command options and errors} {
  629.     list [catch {pack} msg] $msg
  630. } {1 {wrong # args: should be "pack option arg ?arg ...?"}}
  631. test pack-13.2 {command options and errors} {
  632.     list [catch {pack foo} msg] $msg
  633. } {1 {wrong # args: should be "pack option arg ?arg ...?"}}
  634. test pack-13.3 {command options and errors} {
  635.     list [catch {pack configure x} msg] $msg
  636. } {1 {bad argument "x": must be name of window}}
  637. test pack-13.4 {command options and errors} {
  638.     pack forget .pack.a .pack.b .pack.c .pack.d
  639.     pack configure .pack.b .pack.c
  640.     pack slaves .pack
  641. } {.pack.b .pack.c}
  642. test pack-13.5 {command options and errors} {
  643.     pack forget .pack.a .pack.b .pack.c .pack.d
  644.     list [catch {pack .foo} msg] $msg
  645. } {1 {bad window path name ".foo"}}
  646. test pack-13.6 {command options and errors} {
  647.     pack forget .pack.a .pack.b .pack.c .pack.d
  648.     list [catch {pack .pack} msg] $msg
  649. } {1 {can't pack ".pack": it's a top-level window}}
  650. test pack-13.7 {command options and errors} {
  651.     pack forget .pack.a .pack.b .pack.c .pack.d
  652.     list [catch {pack .pack.a -after .foo} msg] $msg
  653. } {1 {bad window path name ".foo"}}
  654. test pack-13.8 {command options and errors} {
  655.     pack forget .pack.a .pack.b .pack.c .pack.d
  656.     list [catch {pack .pack.a -after .pack.b} msg] $msg
  657. } {1 {window ".pack.b" isn't packed}}
  658. test pack-13.9 {command options and errors} {
  659.     pack forget .pack.a .pack.b .pack.c .pack.d
  660.     list [catch {pack .pack.a -anchor gorp} msg] $msg
  661. } {1 {bad anchor position "gorp": must be n, ne, e, se, s, sw, w, nw, or center}}
  662. test pack-13.10 {command options and errors} {
  663.     pack forget .pack.a .pack.b .pack.c .pack.d
  664.     list [catch {pack .pack.a -before gorp} msg] $msg
  665. } {1 {bad window path name "gorp"}}
  666. test pack-13.11 {command options and errors} {
  667.     pack forget .pack.a .pack.b .pack.c .pack.d
  668.     list [catch {pack .pack.a -before .pack.b} msg] $msg
  669. } {1 {window ".pack.b" isn't packed}}
  670. test pack-13.12 {command options and errors} {
  671.     pack forget .pack.a .pack.b .pack.c .pack.d
  672.     list [catch {pack .pack.a -expand "who cares?"} msg] $msg
  673. } {1 {expected boolean value but got "who cares?"}}
  674. test pack-13.13 {command options and errors} {
  675.     pack forget .pack.a .pack.b .pack.c .pack.d
  676.     list [catch {pack .pack.a -fill z} msg] $msg
  677. } {1 {bad fill style "z": must be none, x, y, or both}}
  678. test pack-13.14 {command options and errors} {
  679.     pack forget .pack.a .pack.b .pack.c .pack.d
  680.     list [catch {pack .pack.a -in z} msg] $msg
  681. } {1 {bad window path name "z"}}
  682. set pad [winfo pixels .pack 1c]
  683. test pack-13.15 {command options and errors} {
  684.     pack forget .pack.a .pack.b .pack.c .pack.d
  685.     list [catch {pack .pack.a -padx abc} msg] $msg
  686. } {1 {bad pad value "abc": must be positive screen distance}}
  687. test pack-13.16 {command options and errors} {
  688.     pack forget .pack.a .pack.b .pack.c .pack.d
  689.     list [catch {pack .pack.a -padx -1} msg] $msg
  690. } {1 {bad pad value "-1": must be positive screen distance}}
  691. test pack-13.17 {command options and errors} {
  692.     pack forget .pack.a .pack.b .pack.c .pack.d
  693.     list [catch {pack .pack.a -pady abc} msg] $msg
  694. } {1 {bad pad value "abc": must be positive screen distance}}
  695. test pack-13.18 {command options and errors} {
  696.     pack forget .pack.a .pack.b .pack.c .pack.d
  697.     list [catch {pack .pack.a -pady -1} msg] $msg
  698. } {1 {bad pad value "-1": must be positive screen distance}}
  699. test pack-13.19 {command options and errors} {
  700.     pack forget .pack.a .pack.b .pack.c .pack.d
  701.     list [catch {pack .pack.a -ipadx abc} msg] $msg
  702. } {1 {bad pad value "abc": must be positive screen distance}}
  703. test pack-13.20 {command options and errors} {
  704.     pack forget .pack.a .pack.b .pack.c .pack.d
  705.     list [catch {pack .pack.a -ipadx -1} msg] $msg
  706. } {1 {bad pad value "-1": must be positive screen distance}}
  707. test pack-13.21 {command options and errors} {
  708.     pack forget .pack.a .pack.b .pack.c .pack.d
  709.     list [catch {pack .pack.a -ipady abc} msg] $msg
  710. } {1 {bad pad value "abc": must be positive screen distance}}
  711. test pack-13.22 {command options and errors} {
  712.     pack forget .pack.a .pack.b .pack.c .pack.d
  713.     list [catch {pack .pack.a -ipady -1} msg] $msg
  714. } {1 {bad pad value "-1": must be positive screen distance}}
  715. test pack-13.23 {command options and errors} {
  716.     pack forget .pack.a .pack.b .pack.c .pack.d
  717.     list [catch {pack .pack.a -side bac} msg] $msg
  718. } {1 {bad side "bac": must be top, bottom, left, or right}}
  719. test pack-13.24 {command options and errors} {
  720.     pack forget .pack.a .pack.b .pack.c .pack.d
  721.     list [catch {pack .pack.a -lousy bac} msg] $msg
  722. } {1 {unknown or ambiguous option "-lousy": must be -after, -anchor, -before, -expand, -fill, -in, -ipadx, -ipady, -padx, -pady, or -side}}
  723. test pack-13.25 {command options and errors} {
  724.     pack forget .pack.a .pack.b .pack.c .pack.d
  725.     list [catch {pack .pack.a -padx} msg] $msg
  726. } {1 {extra option "-padx" (option with no value?)}}
  727. test pack-13.26 {command options and errors} {
  728.     pack forget .pack.a .pack.b .pack.c .pack.d
  729.     list [catch {pack .pack.a {} 22} msg] $msg
  730. } {1 {unknown or ambiguous option "": must be -after, -anchor, -before, -expand, -fill, -in, -ipadx, -ipady, -padx, -pady, or -side}}
  731. test pack-13.27 {command options and errors} {
  732.     pack forget .pack.a .pack.b .pack.c .pack.d
  733.     list [catch {pack .pack.a -in .} msg] $msg
  734. } {1 {can't pack .pack.a inside .}}
  735. test pack-13.28 {command options and errors} {
  736.     pack forget .pack.a .pack.b .pack.c .pack.d
  737.     frame .pack.a.a
  738.     list [catch {pack .pack.a.a -in .pack.b} msg] $msg
  739. } {1 {can't pack .pack.a.a inside .pack.b}}
  740. test pack-13.29 {command options and errors} {
  741.     pack forget .pack.a .pack.b .pack.c .pack.d
  742.     pack .pack.a .pack.b .pack.c .pack.d
  743.     pack forget .pack.a .pack.d
  744.     pack slaves .pack
  745. } {.pack.b .pack.c}
  746. test pack-13.30 {command options and errors} {
  747.     pack forget .pack.a .pack.b .pack.c .pack.d
  748.     .pack configure -width 300 -height 200
  749.     pack propagate .pack 0
  750.     pack .pack.a
  751.     update
  752.     set result [list [winfo reqwidth .pack] [winfo reqheight .pack]]
  753.     pack propagate .pack 1
  754.     update
  755.     lappend result [winfo reqwidth .pack] [winfo reqheight .pack]
  756.     set result
  757. } {300 200 20 40}
  758. test pack-13.31 {command options and errors} {
  759.     set result [pack propagate .pack.d]
  760.     pack propagate .pack.d 0
  761.     lappend result [pack propagate .pack.d]
  762.     pack propagate .pack.d 1
  763.     lappend result [pack propagate .pack.d]
  764.     set result
  765. } {1 0 1}
  766. test pack-13.32 {command options and errors} {
  767.     pack forget .pack.a .pack.b .pack.c .pack.d
  768.     list [catch {pack propagate .dum} msg] $msg
  769. } {1 {bad window path name ".dum"}}
  770. test pack-13.33 {command options and errors} {
  771.     pack forget .pack.a .pack.b .pack.c .pack.d
  772.     list [catch {pack propagate .pack foo} msg] $msg
  773. } {1 {expected boolean value but got "foo"}}
  774. test pack-13.34 {command options and errors} {
  775.     pack forget .pack.a .pack.b .pack.c .pack.d
  776.     list [catch {pack propagate .pack foo bar} msg] $msg
  777. } {1 {wrong # args: should be "pack propagate window ?boolean?"}}
  778. test pack-13.35 {command options and errors} {
  779.     pack forget .pack.a .pack.b .pack.c .pack.d
  780.     list [catch {pack slaves} msg] $msg
  781. } {1 {wrong # args: should be "pack option arg ?arg ...?"}}
  782. test pack-13.36 {command options and errors} {
  783.     pack forget .pack.a .pack.b .pack.c .pack.d
  784.     list [catch {pack slaves a b} msg] $msg
  785. } {1 {wrong # args: should be "pack slaves window"}}
  786. test pack-13.37 {command options and errors} {
  787.     pack forget .pack.a .pack.b .pack.c .pack.d
  788.     list [catch {pack slaves .x} msg] $msg
  789. } {1 {bad window path name ".x"}}
  790. test pack-13.38 {command options and errors} {
  791.     pack forget .pack.a .pack.b .pack.c .pack.d
  792.     list [catch {pack slaves .pack.a} msg] $msg
  793. } {0 {}}
  794. test pack-13.39 {command options and errors} {
  795.     pack forget .pack.a .pack.b .pack.c .pack.d
  796.     list [catch {pack lousy .pack} msg] $msg
  797. } {1 {bad option "lousy":  must be configure, forget, info, newinfo, propagate, or slaves}}
  798.  
  799. test pack-14.1 {window deletion} {
  800.     pack forget .pack.a .pack.b .pack.c .pack.d
  801.     pack .pack.right -side right
  802.     pack .pack.bottom -side bottom
  803.     pack .pack.a .pack.d .pack.b .pack.c -side top
  804.     update
  805.     destroy .pack.d
  806.     update
  807.     set result [list [pack slaves .pack] [winfo geometry .pack.a] \
  808.         [winfo geometry .pack.b] [winfo geometry .pack.c]]
  809. } {{.pack.right .pack.bottom .pack.a .pack.b .pack.c} 20x40+30+0 50x30+15+40 80x80+0+70}
  810.  
  811. destroy .pack
  812. foreach i {pack1 pack2 pack3 pack4} {
  813.     rename $i {}
  814. }
  815.