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# Copyright (c) 1994 Sun Microsystems, Inc.
6# Copyright (c) 1998-1999 by Scriptics Corporation.
7# All rights reserved.
8#
9# RCS: @(#) $Id: pack.test,v 1.10.2.1 2006/04/05 17:51:04 dgp Exp $
10
11package require tcltest 2.1
12namespace import -force tcltest::configure
13namespace import -force tcltest::testsDirectory
14configure -testdir [file join [pwd] [file dirname [info script]]]
15configure -loadfile [file join [testsDirectory] constraints.tcl]
16tcltest::loadTestedCommands
17
18# Utility procedures:
19
20proc pack1 {args} {
21    pack forget .pack.a .pack.b .pack.c .pack.d
22    eval pack .pack.a $args
23    pack .pack.b -expand yes -fill both
24    update
25    list [winfo geometry .pack.a] [winfo geometry .pack.b]
26}
27proc pack2 {args} {
28    pack forget .pack.a .pack.b .pack.c .pack.d
29    eval pack .pack.a $args
30    update
31    winfo geometry .pack.a
32}
33proc pack3 {args} {
34    pack forget .pack.a .pack.b .pack.c .pack.d
35    pack .pack.a -side  top
36    pack .pack.c -side left
37    eval pack .pack.b $args
38    update
39    winfo geometry .pack.b
40}
41proc pack4 {option value} {
42    pack forget .pack.a .pack.b .pack.c .pack.d
43    pack .pack.a $option $value
44    set i [pack info .pack.a]
45    lindex $i [expr [lsearch -exact $i $option]+1]
46}
47
48# Create some test windows.
49
50catch {destroy .pack}
51toplevel .pack
52wm geom .pack 300x200+0+0
53wm minsize .pack 1 1
54update idletasks
55foreach i {a b c d} {
56    frame .pack.$i
57    label .pack.$i.label -text $i -relief raised
58    place .pack.$i.label -relwidth 1.0 -relheight 1.0
59}
60.pack.a config -width 20 -height 40
61.pack.b config -width 50 -height 30
62.pack.c config -width 80 -height 80
63.pack.d config -width 40 -height 30
64
65test pack-1.1 {-side option} {
66    pack1 -side top
67} {20x40+140+0 300x160+0+40}
68test pack-1.2 {-side option} {
69    pack1 -side bottom
70} {20x40+140+160 300x160+0+0}
71test pack-1.3 {-side option} {
72    pack1 -side left
73} {20x40+0+80 280x200+20+0}
74test pack-1.4 {-side option} {
75    pack1 -side right
76} {20x40+280+80 280x200+0+0}
77
78test pack-2.1 {x padding and filling} {
79    pack1 -side right -padx 20
80} {20x40+260+80 240x200+0+0}
81test pack-2.1.1 {x padding and filling} {
82    pack1 -side right -padx {10 30}
83} {20x40+250+80 240x200+0+0}
84test pack-2.1.2 {x padding and filling} {
85    pack1 -side right -padx {35 5}
86} {20x40+275+80 240x200+0+0}
87test pack-2.2 {x padding and filling} {
88    pack1 -side right -ipadx 20
89} {60x40+240+80 240x200+0+0}
90test pack-2.3 {x padding and filling} {
91    pack1 -side right -ipadx 5 -padx 10
92} {30x40+260+80 250x200+0+0}
93test pack-2.4 {x padding and filling} {
94    pack1 -side right -padx 20 -fill x
95} {20x40+260+80 240x200+0+0}
96test pack-2.4.1 {x padding and filling} {
97    pack1 -side right -padx {9 31} -fill x
98} {20x40+249+80 240x200+0+0}
99test pack-2.5 {x padding and filling} {
100    pack1 -side right -ipadx 20 -fill x
101} {60x40+240+80 240x200+0+0}
102test pack-2.6 {x padding and filling} {
103    pack1 -side right -ipadx 5 -padx 10 -fill x
104} {30x40+260+80 250x200+0+0}
105test pack-2.6.1 {x padding and filling} {
106    pack1 -side right -ipadx 5 -padx {5 15} -fill x
107} {30x40+255+80 250x200+0+0}
108test pack-2.7 {x padding and filling} {
109    pack1 -side top -padx 20
110} {20x40+140+0 300x160+0+40}
111test pack-2.7.1 {x padding and filling} {
112    pack1 -side top -padx {0 40}
113} {20x40+120+0 300x160+0+40}
114test pack-2.7.2 {x padding and filling} {
115    pack1 -side top -padx {31 9}
116} {20x40+151+0 300x160+0+40}
117test pack-2.8 {x padding and filling} {
118    pack1 -side top -ipadx 20
119} {60x40+120+0 300x160+0+40}
120test pack-2.9 {x padding and filling} {
121    pack1 -side top -ipadx 5 -padx 10
122} {30x40+135+0 300x160+0+40}
123test pack-2.9.1 {x padding and filling} {
124    pack1 -side top -ipadx 5 -padx {5 15}
125} {30x40+130+0 300x160+0+40}
126test pack-2.10 {x padding and filling} {
127    pack1 -side top -padx 20 -fill x
128} {260x40+20+0 300x160+0+40}
129test pack-2.10.1 {x padding and filling} {
130    pack1 -side top -padx {25 15} -fill x
131} {260x40+25+0 300x160+0+40}
132test pack-2.11 {x padding and filling} {
133    pack1 -side top -ipadx 20 -fill x
134} {300x40+0+0 300x160+0+40}
135test pack-2.12 {x padding and filling} {
136    pack1 -side top -ipadx 5 -padx 10 -fill x
137} {280x40+10+0 300x160+0+40}
138test pack-2.12 {x padding and filling} {
139    pack1 -side top -ipadx 5 -padx {5 15} -fill x
140} {280x40+5+0 300x160+0+40}
141set pad [winfo pixels .pack 1c]
142test pack-2.13 {x padding and filling} {
143    pack forget .pack.a .pack.b .pack.c .pack.d
144    pack .pack.a -padx 1c
145    set x [pack info .pack.a]
146    lindex $x [expr [lsearch -exact $x -padx]+1]
147} $pad
148test pack-2.14 {x padding and filling} {
149    pack forget .pack.a .pack.b .pack.c .pack.d
150    pack .pack.a -ipadx 1c
151    set x [pack info .pack.a]
152    lindex $x [expr [lsearch -exact $x -ipadx]+1]
153} $pad
154
155test pack-3.1 {y padding and filling} {
156    pack1 -side right -pady 20
157} {20x40+280+80 280x200+0+0}
158test pack-3.1.1 {y padding and filling} {
159    pack1 -side right -pady {5 35}
160} {20x40+280+65 280x200+0+0}
161test pack-3.1.2 {y padding and filling} {
162    pack1 -side right -pady {40 0}
163} {20x40+280+100 280x200+0+0}
164test pack-3.2 {y padding and filling} {
165    pack1 -side right -ipady 20
166} {20x80+280+60 280x200+0+0}
167test pack-3.3 {y padding and filling} {
168    pack1 -side right -ipady 5 -pady 10
169} {20x50+280+75 280x200+0+0}
170test pack-3.3.1 {y padding and filling} {
171    pack1 -side right -ipady 5 -pady {5 15}
172} {20x50+280+70 280x200+0+0}
173test pack-3.4 {y padding and filling} {
174    pack1 -side right -pady 20 -fill y
175} {20x160+280+20 280x200+0+0}
176test pack-3.4.1 {y padding and filling} {
177    pack1 -side right -pady {35 5} -fill y
178} {20x160+280+35 280x200+0+0}
179test pack-3.5 {y padding and filling} {
180    pack1 -side right -ipady 20 -fill y
181} {20x200+280+0 280x200+0+0}
182test pack-3.6 {y padding and filling} {
183    pack1 -side right -ipady 5 -pady 10 -fill y
184} {20x180+280+10 280x200+0+0}
185test pack-3.6.1 {y padding and filling} {
186    pack1 -side right -ipady 5 -pady {0 20} -fill y
187} {20x180+280+0 280x200+0+0}
188test pack-3.7 {y padding and filling} {
189    pack1 -side top -pady 20
190} {20x40+140+20 300x120+0+80}
191test pack-3.7.1 {y padding and filling} {
192    pack1 -side top -pady {40 0}
193} {20x40+140+40 300x120+0+80}
194test pack-3.8 {y padding and filling} {
195    pack1 -side top -ipady 20
196} {20x80+140+0 300x120+0+80}
197test pack-3.9 {y padding and filling} {
198    pack1 -side top -ipady 5 -pady 10
199} {20x50+140+10 300x130+0+70}
200test pack-3.9.1 {y padding and filling} {
201    pack1 -side top -ipady 5 -pady {3 17}
202} {20x50+140+3 300x130+0+70}
203test pack-3.10 {y padding and filling} {
204    pack1 -side top -pady 20 -fill y
205} {20x40+140+20 300x120+0+80}
206test pack-3.10.1 {y padding and filling} {
207    pack1 -side top -pady {39 1} -fill y
208} {20x40+140+39 300x120+0+80}
209test pack-3.11 {y padding and filling} {
210    pack1 -side top -ipady 20 -fill y
211} {20x80+140+0 300x120+0+80}
212test pack-3.12 {y padding and filling} {
213    pack1 -side top -ipady 5 -pady 10 -fill y
214} {20x50+140+10 300x130+0+70}
215test pack-3.12.1 {y padding and filling} {
216    pack1 -side top -ipady 5 -pady {1 19} -fill y
217} {20x50+140+1 300x130+0+70}
218set pad [winfo pixels .pack 1c]
219test pack-3.13 {y padding and filling} {
220    pack forget .pack.a .pack.b .pack.c .pack.d
221    pack .pack.a -pady 1c
222    set x [pack info .pack.a]
223    lindex $x [expr [lsearch -exact $x -pady]+1]
224} $pad
225test pack-3.14 {y padding and filling} {
226    pack forget .pack.a .pack.b .pack.c .pack.d
227    pack .pack.a -ipady 1c
228    set x [pack info .pack.a]
229    lindex $x [expr [lsearch -exact $x -ipady]+1]
230} $pad
231
232test pack-4.1 {anchors} {
233    pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor n
234} {30x70+135+20}
235test pack-4.2 {anchors} {
236    pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor ne
237} {30x70+260+20}
238test pack-4.3 {anchors} {
239    pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor e
240} {30x70+260+65}
241test pack-4.4 {anchors} {
242    pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor se
243} {30x70+260+110}
244test pack-4.5 {anchors} {
245    pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor s
246} {30x70+135+110}
247test pack-4.6 {anchors} {
248    pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor sw
249} {30x70+10+110}
250test pack-4.7 {anchors} {
251    pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor w
252} {30x70+10+65}
253test pack-4.8 {anchors} {
254    pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor nw
255} {30x70+10+20}
256test pack-4.9 {anchors} {
257    pack2 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor center
258} {30x70+135+65}
259
260# Repeat above tests, but with a frame that isn't at (0,0), so that
261# we can be sure that the frame offset is being added in correctly.
262
263test pack-5.1 {more anchors} {
264    pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor n
265} {60x60+160+60}
266test pack-5.2 {more anchors} {
267    pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor ne
268} {60x60+230+60}
269test pack-5.3 {more anchors} {
270    pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor e
271} {60x60+230+90}
272test pack-5.4 {more anchors} {
273    pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor se
274} {60x60+230+120}
275test pack-5.5 {more anchors} {
276    pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor s
277} {60x60+160+120}
278test pack-5.6 {more anchors} {
279    pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor sw
280} {60x60+90+120}
281test pack-5.7 {more anchors} {
282    pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor w
283} {60x60+90+90}
284test pack-5.8 {more anchors} {
285    pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor nw
286} {60x60+90+60}
287test pack-5.9 {more anchors} {
288    pack3 -side top -ipadx 5 -padx 10 -ipady 15 -pady 20 -expand y -anchor center
289} {60x60+160+90}
290
291test pack-6.1 {-expand option} {
292    pack forget .pack.a .pack.b .pack.c .pack.d
293    pack .pack.a .pack.b .pack.c .pack.d -side left
294    update
295    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
296	    [winfo geometry .pack.c] [winfo geometry .pack.d]
297} {20x40+0+80 50x30+20+85 80x80+70+60 40x30+150+85}
298test pack-6.2 {-expand option} {
299    pack forget .pack.a .pack.b .pack.c .pack.d
300    pack .pack.a -side left -expand yes
301    pack .pack.b -side left
302    pack .pack.c .pack.d -side left -expand 1
303    update
304    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
305	    [winfo geometry .pack.c] [winfo geometry .pack.d]
306} {20x40+18+80 50x30+56+85 80x80+124+60 40x30+241+85}
307test pack-6.3 {-expand option} {
308    pack forget .pack.a .pack.b .pack.c .pack.d
309    pack .pack.a .pack.b .pack.c .pack.d -side top
310    update
311    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
312	    [winfo geometry .pack.c] [winfo geometry .pack.d]
313} {20x40+140+0 50x30+125+40 80x80+110+70 40x30+130+150}
314test pack-6.4 {-expand option} {
315    pack forget .pack.a .pack.b .pack.c .pack.d
316    pack .pack.a -side top -expand yes
317    pack .pack.b -side top
318    pack .pack.c .pack.d -side top -expand 1
319    update
320    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
321	    [winfo geometry .pack.c] [winfo geometry .pack.d]
322} {20x40+140+3 50x30+125+46 80x80+110+79 40x30+130+166}
323test pack-6.5 {-expand option} {
324    pack forget .pack.a .pack.b .pack.c .pack.d
325    pack .pack.a .pack.b .pack.c .pack.d -side right
326    update
327    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
328	    [winfo geometry .pack.c] [winfo geometry .pack.d]
329} {20x40+280+80 50x30+230+85 80x80+150+60 40x30+110+85}
330test pack-6.6 {-expand option} {
331    pack forget .pack.a .pack.b .pack.c .pack.d
332    pack .pack.a -side right -expand yes
333    pack .pack.b -side right
334    pack .pack.c .pack.d -side right -expand 1
335    update
336    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
337	    [winfo geometry .pack.c] [winfo geometry .pack.d]
338} {20x40+262+80 50x30+194+85 80x80+95+60 40x30+18+85}
339test pack-6.7 {-expand option} {
340    pack forget .pack.a .pack.b .pack.c .pack.d
341    pack .pack.a .pack.b .pack.c .pack.d -side bottom
342    update
343    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
344	    [winfo geometry .pack.c] [winfo geometry .pack.d]
345} {20x40+140+160 50x30+125+130 80x80+110+50 40x30+130+20}
346test pack-6.8 {-expand option} {
347    pack forget .pack.a .pack.b .pack.c .pack.d
348    pack .pack.a -side bottom -expand yes
349    pack .pack.b -side bottom
350    pack .pack.c .pack.d -side bottom -expand 1
351    update
352    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
353	    [winfo geometry .pack.c] [winfo geometry .pack.d]
354} {20x40+140+157 50x30+125+124 80x80+110+40 40x30+130+3}
355test pack-6.9 {-expand option} {
356    pack forget .pack.a .pack.b .pack.c .pack.d
357    pack .pack.a -side bottom -expand yes -fill both
358    pack .pack.b -side right
359    pack .pack.c -side top -expand 1 -fill both
360    pack .pack.d -side left
361    update
362    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
363	    [winfo geometry .pack.c] [winfo geometry .pack.d]
364} {300x65+0+135 50x30+250+52 250x105+0+0 40x30+0+105}
365test pack-6.10 {-expand option} {
366    pack forget .pack.a .pack.b .pack.c .pack.d
367    pack .pack.a -side left -expand yes -fill both
368    pack .pack.b -side top
369    pack .pack.c -side right -expand 1 -fill both
370    pack .pack.d -side bottom
371    update
372    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
373	    [winfo geometry .pack.c] [winfo geometry .pack.d]
374} {100x200+0+0 50x30+175+0 160x170+140+30 40x30+100+170}
375test pack-6.11 {-expand option} {
376    pack forget .pack.a .pack.b .pack.c .pack.d
377    pack .pack.a -side left -expand yes -fill both
378    pack .pack.b -side top -expand yes -fill both
379    pack .pack.c -side right -expand 1 -fill both
380    pack .pack.d -side bottom -expand yes -fill both
381    update
382    list [winfo geometry .pack.a] [winfo geometry .pack.b] \
383	    [winfo geometry .pack.c] [winfo geometry .pack.d]
384} {100x200+0+0 200x100+100+0 160x100+140+100 40x100+100+100}
385catch {destroy .pack2}
386toplevel .pack2 -height 400 -width 400
387wm geometry .pack2 +0+0
388pack propagate .pack2 0
389pack forget .pack2.a .pack2.b .pack2.c .pack2.d
390foreach i {w1 w2 w3} {
391    frame .pack2.$i -width 30 -height 30 -bd 2 -relief raised
392    label .pack2.$i.l -text $i
393    place .pack2.$i.l -relwidth 1.0 -relheight 1.0
394}
395test pack-6.12 {-expand option} {
396    pack .pack2.w1 .pack2.w2 .pack2.w3 -padx 5 -ipadx 4 -pady 2 -ipady 6 -expand 1 -side left
397    update
398    list [winfo geometry .pack2.w1] [winfo geometry .pack2.w2] [winfo geometry .pack2.w3]
399} {38x42+47+179 38x42+180+179 38x42+314+179}
400test pack-6.13 {-expand option} {
401    pack forget .pack2.w1 .pack2.w2 .pack2.w3
402    pack .pack2.w1 .pack2.w2 .pack2.w3 -padx 5 -ipadx 4 -pady 2 \
403	    -ipady 6 -expand 1 -side top
404    update
405    list [winfo geometry .pack2.w1] [winfo geometry .pack2.w2] [winfo geometry .pack2.w3]
406} {38x42+181+45 38x42+181+178 38x42+181+312}
407catch {destroy .pack2}
408
409wm geometry .pack {}
410test pack-7.1 {requesting size for parent} {
411    pack forget .pack.a .pack.b .pack.c .pack.d
412    pack .pack.a .pack.b .pack.c .pack.d -side left -padx 5 -pady 10
413    update
414    list [winfo reqwidth .pack] [winfo reqheight .pack]
415} {230 100}
416test pack-7.2 {requesting size for parent} {
417    pack forget .pack.a .pack.b .pack.c .pack.d
418    pack .pack.a .pack.b .pack.c .pack.d -side top -padx 5 -pady 10
419    update
420    list [winfo reqwidth .pack] [winfo reqheight .pack]
421} {90 260}
422test pack-7.3 {requesting size for parent} {
423    pack forget .pack.a .pack.b .pack.c .pack.d
424    pack .pack.a .pack.b .pack.c .pack.d -side right -padx 5 -pady 10
425    update
426    list [winfo reqwidth .pack] [winfo reqheight .pack]
427} {230 100}
428test pack-7.4 {requesting size for parent} {
429    pack forget .pack.a .pack.b .pack.c .pack.d
430    pack .pack.a .pack.b .pack.c .pack.d -side bottom -padx 5 -pady 10
431    update
432    list [winfo reqwidth .pack] [winfo reqheight .pack]
433} {90 260}
434test pack-7.5 {requesting size for parent} {
435    pack forget .pack.a .pack.b .pack.c .pack.d
436    pack .pack.a -side top -padx 5 -pady 10
437    pack .pack.b -side right -padx 5 -pady 10
438    pack .pack.c -side bottom -padx 5 -pady 10
439    pack .pack.d -side left -padx 5 -pady 10
440    update
441    list [winfo reqwidth .pack] [winfo reqheight .pack]
442} {150 210}
443test pack-7.6 {requesting size for parent} {
444    pack forget .pack.a .pack.b .pack.c .pack.d
445    pack .pack.a -side top
446    pack .pack.c -side left
447    pack .pack.d -side bottom
448    update
449    list [winfo reqwidth .pack] [winfo reqheight .pack]
450} {120 120}
451test pack-7.7 {requesting size for parent} {
452    pack forget .pack.a .pack.b .pack.c .pack.d
453    pack .pack.a -side right
454    pack .pack.c -side bottom
455    pack .pack.d -side top
456    update
457    list [winfo reqwidth .pack] [winfo reqheight .pack]
458} {100 110}
459
460
461# For the tests below, create a couple of "pad" windows to shrink
462# the available space for the remaining windows.  The tests have to
463# be done this way rather than shrinking the whole window, because
464# some window managers like mwm won't let a top-level window get
465# very small.
466
467pack forget .pack.a .pack.b .pack.c .pack.d
468frame .pack.right -width 200 -height 10 -bd 2 -relief raised
469frame .pack.bottom -width 10 -height 150 -bd 2 -relief raised
470pack .pack.right -side right
471pack .pack.bottom -side bottom
472pack .pack.a .pack.b .pack.c -side top
473update
474test pack-8.1 {insufficient space} {
475    list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
476	    [winfo geometry .pack.b] [winfo ismapped .pack.b] \
477	    [winfo geometry .pack.c] [winfo ismapped .pack.c]
478} {20x40+30+0 1 50x30+15+40 1 80x80+0+70 1}
479wm geom .pack 270x250
480update
481test pack-8.2 {insufficient space} {
482    list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
483	    [winfo geometry .pack.b] [winfo ismapped .pack.b] \
484	    [winfo geometry .pack.c] [winfo ismapped .pack.c]
485} {20x40+25+0 1 50x30+10+40 1 70x30+0+70 1}
486wm geom .pack 240x220
487update
488test pack-8.3 {insufficient space} {
489    list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
490	    [winfo geometry .pack.b] [winfo ismapped .pack.b] \
491	    [winfo geometry .pack.c] [winfo ismapped .pack.c]
492} {20x40+10+0 1 40x30+0+40 1 70x30+0+70 0}
493wm geom .pack 350x350
494update
495test pack-8.4 {insufficient space} {
496    list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
497	    [winfo geometry .pack.b] [winfo ismapped .pack.b] \
498	    [winfo geometry .pack.c] [winfo ismapped .pack.c]
499} {20x40+65+0 1 50x30+50+40 1 80x80+35+70 1}
500wm geom .pack {}
501pack .pack.a -side left
502pack .pack.b -side right
503pack .pack.c -side left
504update
505test pack-8.5 {insufficient space} {
506    list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
507	    [winfo geometry .pack.b] [winfo ismapped .pack.b] \
508	    [winfo geometry .pack.c] [winfo ismapped .pack.c]
509} {20x40+0+20 1 50x30+100+25 1 80x80+20+0 1}
510wm geom .pack 320x180
511update
512test pack-8.6 {insufficient space} {
513    list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
514	    [winfo geometry .pack.b] [winfo ismapped .pack.b] \
515	    [winfo geometry .pack.c] [winfo ismapped .pack.c]
516} {20x30+0+0 1 50x30+70+0 1 50x30+20+0 1}
517wm geom .pack 250x180
518update
519test pack-8.7 {insufficient space} {
520    list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
521	    [winfo geometry .pack.b] [winfo ismapped .pack.b] \
522	    [winfo geometry .pack.c] [winfo ismapped .pack.c]
523} {20x30+0+0 1 30x30+20+0 1 50x30+20+0 0}
524pack forget .pack.b
525update
526test pack-8.8 {insufficient space} {
527    list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
528	    [winfo geometry .pack.b] [winfo ismapped .pack.b] \
529	    [winfo geometry .pack.c] [winfo ismapped .pack.c]
530} {20x30+0+0 1 30x30+20+0 0 30x30+20+0 1}
531pack .pack.b -side right -after .pack.a
532wm geom .pack {}
533update
534test pack-8.9 {insufficient space} {
535    list [winfo geometry .pack.a] [winfo ismapped .pack.a] \
536	    [winfo geometry .pack.b] [winfo ismapped .pack.b] \
537	    [winfo geometry .pack.c] [winfo ismapped .pack.c]
538} {20x40+0+20 1 50x30+100+25 1 80x80+20+0 1}
539pack forget .pack.right .pack.bottom
540
541test pack-9.1 {window ordering} {
542    pack forget .pack.a .pack.b .pack.c .pack.d
543    pack .pack.a .pack.b .pack.c .pack.d -side top
544    pack .pack.a -after .pack.b
545    pack slaves .pack
546} {.pack.b .pack.a .pack.c .pack.d}
547test pack-9.2 {window ordering} {
548    pack forget .pack.a .pack.b .pack.c .pack.d
549    pack .pack.a .pack.b .pack.c .pack.d -side top
550    pack .pack.a -after .pack.a
551    pack slaves .pack
552} {.pack.a .pack.b .pack.c .pack.d}
553test pack-9.3 {window ordering} {
554    pack forget .pack.a .pack.b .pack.c .pack.d
555    pack .pack.a .pack.b .pack.c .pack.d -side top
556    pack .pack.a -before .pack.d
557    pack slaves .pack
558} {.pack.b .pack.c .pack.a .pack.d}
559test pack-9.4 {window ordering} {
560    pack forget .pack.a .pack.b .pack.c .pack.d
561    pack .pack.a .pack.b .pack.c .pack.d -side top
562    pack .pack.d -before .pack.a
563    pack slaves .pack
564} {.pack.d .pack.a .pack.b .pack.c}
565test pack-9.5 {window ordering} {
566    pack forget .pack.a .pack.b .pack.c .pack.d
567    pack .pack.a .pack.b .pack.c .pack.d -side top
568    pack propagate .pack.c 0
569    pack .pack.a -in .pack.c
570    list [pack slaves .pack] [pack slaves .pack.c]
571} {{.pack.b .pack.c .pack.d} .pack.a}
572test pack-9.6 {window ordering} {
573    pack forget .pack.a .pack.b .pack.c .pack.d
574    pack .pack.a .pack.b .pack.c .pack.d -side top
575    pack .pack.a -in .pack
576    pack slaves .pack
577} {.pack.b .pack.c .pack.d .pack.a}
578test pack-9.7 {window ordering} {
579    pack forget .pack.a .pack.b .pack.c .pack.d
580    pack .pack.a .pack.b .pack.c .pack.d -side top
581    pack .pack.a -padx 0
582    pack slaves .pack
583} {.pack.a .pack.b .pack.c .pack.d}
584test pack-9.8 {window ordering} {
585    pack forget .pack.a .pack.b .pack.c .pack.d
586    pack .pack.a .pack.b .pack.c
587    pack .pack.d
588    pack slaves .pack
589} {.pack.a .pack.b .pack.c .pack.d}
590test pack-9.9 {window ordering} {
591    pack forget .pack.a .pack.b .pack.c .pack.d
592    pack .pack.a .pack.b .pack.c .pack.d
593    pack .pack.b .pack.d .pack.c -before .pack.a
594    pack slaves .pack
595} {.pack.b .pack.d .pack.c .pack.a}
596test pack-9.10 {window ordering} {
597    pack forget .pack.a .pack.b .pack.c .pack.d
598    pack .pack.a .pack.b .pack.c .pack.d
599    pack .pack.a .pack.c .pack.d .pack.b -after .pack.a
600    pack slaves .pack
601} {.pack.a .pack.c .pack.d .pack.b}
602
603test pack-10.1 {retaining/clearing configuration state} {
604    pack forget .pack.a .pack.b .pack.c .pack.d
605    pack .pack.a -side bottom -anchor n -padx 1 -pady 2 -ipadx 3 -ipady 4 \
606	-fill both -expand 1
607    pack forget .pack.a
608    pack .pack.a
609    pack info .pack.a
610} {-in .pack -anchor center -expand 0 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top}
611test pack-10.2 {retaining/clearing configuration state} {
612    pack forget .pack.a .pack.b .pack.c .pack.d
613    pack .pack.a -side bottom -anchor n -padx 1 -pady 2 -ipadx 3 -ipady 4 \
614	-fill both -expand 1
615    pack .pack.a -pady 14
616    pack info .pack.a
617} {-in .pack -anchor n -expand 1 -fill both -ipadx 3 -ipady 4 -padx 1 -pady 14 -side bottom}
618
619test pack-11.1 {info option} {
620    pack4 -in .pack
621} .pack
622test pack-11.2 {info option} {
623    pack4 -anchor n
624} n
625test pack-11.3 {info option} {
626    pack4 -anchor sw
627} sw
628test pack-11.4 {info option} {
629    pack4 -expand yes
630} 1
631test pack-11.5 {info option} {
632    pack4 -expand no
633} 0
634test pack-11.6 {info option} {
635    pack4 -fill x
636} x
637test pack-11.7 {info option} {
638    pack4 -fill y
639} y
640test pack-11.8 {info option} {
641    pack4 -fill both
642} both
643test pack-11.9 {info option} {
644    pack4 -fill none
645} none
646test pack-11.10 {info option} {
647    pack4 -ipadx 14
648} 14
649test pack-11.11 {info option} {
650    pack4 -ipady 22
651} 22
652test pack-11.12 {info option} {
653    pack4 -padx 2
654} 2
655test pack-11.12.1 {info option} {
656    pack4 -padx {2 9}
657} {2 9}
658test pack-11.13 {info option} {
659    pack4 -pady 3
660} 3
661test pack-11.13.1 {info option} {
662    pack4 -pady {3 11}
663} {3 11}
664test pack-11.14 {info option} {
665    pack4 -side top
666} top
667test pack-11.15 {info option} {
668    pack4 -side bottom
669} bottom
670test pack-11.16 {info option} {
671    pack4 -side left
672} left
673test pack-11.17 {info option} {
674    pack4 -side right
675} right
676
677test pack-12.1 {command options and errors} {
678    list [catch {pack} msg] $msg
679} {1 {wrong # args: should be "pack option arg ?arg ...?"}}
680test pack-12.2 {command options and errors} {
681    list [catch {pack foo} msg] $msg
682} {1 {wrong # args: should be "pack option arg ?arg ...?"}}
683test pack-12.3 {command options and errors} {
684    list [catch {pack configure x} msg] $msg
685} {1 {bad argument "x": must be name of window}}
686test pack-12.4 {command options and errors} {
687    pack forget .pack.a .pack.b .pack.c .pack.d
688    pack configure .pack.b .pack.c
689    pack slaves .pack
690} {.pack.b .pack.c}
691test pack-12.5 {command options and errors} {
692    pack forget .pack.a .pack.b .pack.c .pack.d
693    list [catch {pack .foo} msg] $msg
694} {1 {bad window path name ".foo"}}
695test pack-12.6 {command options and errors} {
696    pack forget .pack.a .pack.b .pack.c .pack.d
697    list [catch {pack .pack} msg] $msg
698} {1 {can't pack ".pack": it's a top-level window}}
699test pack-12.7 {command options and errors} {
700    pack forget .pack.a .pack.b .pack.c .pack.d
701    list [catch {pack .pack.a -after .foo} msg] $msg
702} {1 {bad window path name ".foo"}}
703test pack-12.8 {command options and errors} {
704    pack forget .pack.a .pack.b .pack.c .pack.d
705    list [catch {pack .pack.a -after .pack.b} msg] $msg
706} {1 {window ".pack.b" isn't packed}}
707test pack-12.9 {command options and errors} {
708    pack forget .pack.a .pack.b .pack.c .pack.d
709    list [catch {pack .pack.a -anchor gorp} msg] $msg
710} {1 {bad anchor "gorp": must be n, ne, e, se, s, sw, w, nw, or center}}
711test pack-12.10 {command options and errors} {
712    pack forget .pack.a .pack.b .pack.c .pack.d
713    list [catch {pack .pack.a -before gorp} msg] $msg
714} {1 {bad window path name "gorp"}}
715test pack-12.11 {command options and errors} {
716    pack forget .pack.a .pack.b .pack.c .pack.d
717    list [catch {pack .pack.a -before .pack.b} msg] $msg
718} {1 {window ".pack.b" isn't packed}}
719test pack-12.12 {command options and errors} {
720    pack forget .pack.a .pack.b .pack.c .pack.d
721    list [catch {pack .pack.a -expand "who cares?"} msg] $msg
722} {1 {expected boolean value but got "who cares?"}}
723test pack-12.13 {command options and errors} {
724    pack forget .pack.a .pack.b .pack.c .pack.d
725    list [catch {pack .pack.a -fill z} msg] $msg
726} {1 {bad fill style "z": must be none, x, y, or both}}
727test pack-12.14 {command options and errors} {
728    pack forget .pack.a .pack.b .pack.c .pack.d
729    list [catch {pack .pack.a -in z} msg] $msg
730} {1 {bad window path name "z"}}
731set pad [winfo pixels .pack 1c]
732test pack-12.15 {command options and errors} {
733    pack forget .pack.a .pack.b .pack.c .pack.d
734    list [catch {pack .pack.a -padx abc} msg] $msg
735} {1 {bad pad value "abc": must be positive screen distance}}
736test pack-12.15.1 {command options and errors} {
737    pack forget .pack.a .pack.b .pack.c .pack.d
738    list [catch {pack .pack.a -padx {5 abc}} msg] $msg
739} {1 {bad 2nd pad value "abc": must be positive screen distance}}
740test pack-12.16 {command options and errors} {
741    pack forget .pack.a .pack.b .pack.c .pack.d
742    list [catch {pack .pack.a -padx -1} msg] $msg
743} {1 {bad pad value "-1": must be positive screen distance}}
744test pack-12.16.1 {command options and errors} {
745    pack forget .pack.a .pack.b .pack.c .pack.d
746    list [catch {pack .pack.a -padx {5 -1}} msg] $msg
747} {1 {bad 2nd pad value "-1": must be positive screen distance}}
748test pack-12.17 {command options and errors} {
749    pack forget .pack.a .pack.b .pack.c .pack.d
750    list [catch {pack .pack.a -pady abc} msg] $msg
751} {1 {bad pad value "abc": must be positive screen distance}}
752test pack-12.17.1 {command options and errors} {
753    pack forget .pack.a .pack.b .pack.c .pack.d
754    list [catch {pack .pack.a -pady {0 abc}} msg] $msg
755} {1 {bad 2nd pad value "abc": must be positive screen distance}}
756test pack-12.18 {command options and errors} {
757    pack forget .pack.a .pack.b .pack.c .pack.d
758    list [catch {pack .pack.a -pady -1} msg] $msg
759} {1 {bad pad value "-1": must be positive screen distance}}
760test pack-12.18.1 {command options and errors} {
761    pack forget .pack.a .pack.b .pack.c .pack.d
762    list [catch {pack .pack.a -pady {0 -1}} msg] $msg
763} {1 {bad 2nd pad value "-1": must be positive screen distance}}
764test pack-12.19 {command options and errors} {
765    pack forget .pack.a .pack.b .pack.c .pack.d
766    list [catch {pack .pack.a -ipadx abc} msg] $msg
767} {1 {bad ipadx value "abc": must be positive screen distance}}
768test pack-12.20 {command options and errors} {
769    pack forget .pack.a .pack.b .pack.c .pack.d
770    list [catch {pack .pack.a -ipadx -1} msg] $msg
771} {1 {bad ipadx value "-1": must be positive screen distance}}
772test pack-12.20.1 {command options and errors} {
773    pack forget .pack.a .pack.b .pack.c .pack.d
774    list [catch {pack .pack.a -ipadx {5 5}} msg] $msg
775} {1 {bad ipadx value "5 5": must be positive screen distance}}
776test pack-12.21 {command options and errors} {
777    pack forget .pack.a .pack.b .pack.c .pack.d
778    list [catch {pack .pack.a -ipady abc} msg] $msg
779} {1 {bad ipady value "abc": must be positive screen distance}}
780test pack-12.22 {command options and errors} {
781    pack forget .pack.a .pack.b .pack.c .pack.d
782    list [catch {pack .pack.a -ipady -1} msg] $msg
783} {1 {bad ipady value "-1": must be positive screen distance}}
784test pack-12.22.1 {command options and errors} {
785    pack forget .pack.a .pack.b .pack.c .pack.d
786    list [catch {pack .pack.a -ipady {5 5}} msg] $msg
787} {1 {bad ipady value "5 5": must be positive screen distance}}
788test pack-12.23 {command options and errors} {
789    pack forget .pack.a .pack.b .pack.c .pack.d
790    list [catch {pack .pack.a -side bac} msg] $msg
791} {1 {bad side "bac": must be top, bottom, left, or right}}
792test pack-12.24 {command options and errors} {
793    pack forget .pack.a .pack.b .pack.c .pack.d
794    list [catch {pack .pack.a -lousy bac} msg] $msg
795} {1 {bad option "-lousy": must be -after, -anchor, -before, -expand, -fill, -in, -ipadx, -ipady, -padx, -pady, or -side}}
796test pack-12.25 {command options and errors} {
797    pack forget .pack.a .pack.b .pack.c .pack.d
798    list [catch {pack .pack.a -padx} msg] $msg
799} {1 {extra option "-padx" (option with no value?)}}
800test pack-12.26 {command options and errors} {
801    pack forget .pack.a .pack.b .pack.c .pack.d
802    list [catch {pack .pack.a ? 22} msg] $msg
803} {1 {bad option "?": must be -after, -anchor, -before, -expand, -fill, -in, -ipadx, -ipady, -padx, -pady, or -side}}
804test pack-12.27 {command options and errors} {
805    pack forget .pack.a .pack.b .pack.c .pack.d
806    list [catch {pack .pack.a -in .} msg] $msg
807} {1 {can't pack .pack.a inside .}}
808test pack-12.28 {command options and errors} {
809    pack forget .pack.a .pack.b .pack.c .pack.d
810    frame .pack.a.a
811    list [catch {pack .pack.a.a -in .pack.b} msg] $msg
812} {1 {can't pack .pack.a.a inside .pack.b}}
813test pack-12.29 {command options and errors} {
814    pack forget .pack.a .pack.b .pack.c .pack.d
815    list [catch {pack .pack.a -in .pack.a} msg] $msg
816} {1 {can't pack .pack.a inside itself}}
817test pack-12.30 {command options and errors} {
818    pack forget .pack.a .pack.b .pack.c .pack.d
819    pack .pack.a .pack.b .pack.c .pack.d
820    pack forget .pack.a .pack.d
821    pack slaves .pack
822} {.pack.b .pack.c}
823test pack-12.31 {command options and errors} {
824    pack forget .pack.a .pack.b .pack.c .pack.d
825    .pack configure -width 300 -height 200
826    pack propagate .pack 0
827    pack .pack.a
828    update
829    set result [list [winfo reqwidth .pack] [winfo reqheight .pack]]
830    pack propagate .pack 1
831    update
832    lappend result [winfo reqwidth .pack] [winfo reqheight .pack]
833    set result
834} {300 200 20 40}
835test pack-12.32 {command options and errors} {
836    set result [pack propagate .pack.d]
837    pack propagate .pack.d 0
838    lappend result [pack propagate .pack.d]
839    pack propagate .pack.d 1
840    lappend result [pack propagate .pack.d]
841    set result
842} {1 0 1}
843test pack-12.33 {command options and errors} {
844    pack forget .pack.a .pack.b .pack.c .pack.d
845    list [catch {pack propagate .dum} msg] $msg
846} {1 {bad window path name ".dum"}}
847test pack-12.34 {command options and errors} {
848    pack forget .pack.a .pack.b .pack.c .pack.d
849    list [catch {pack propagate .pack foo} msg] $msg
850} {1 {expected boolean value but got "foo"}}
851test pack-12.35 {command options and errors} {
852    pack forget .pack.a .pack.b .pack.c .pack.d
853    list [catch {pack propagate .pack foo bar} msg] $msg
854} {1 {wrong # args: should be "pack propagate window ?boolean?"}}
855test pack-12.36 {command options and errors} {
856    pack forget .pack.a .pack.b .pack.c .pack.d
857    list [catch {pack slaves} msg] $msg
858} {1 {wrong # args: should be "pack option arg ?arg ...?"}}
859test pack-12.37 {command options and errors} {
860    pack forget .pack.a .pack.b .pack.c .pack.d
861    list [catch {pack slaves a b} msg] $msg
862} {1 {wrong # args: should be "pack slaves window"}}
863test pack-12.38 {command options and errors} {
864    pack forget .pack.a .pack.b .pack.c .pack.d
865    list [catch {pack slaves .x} msg] $msg
866} {1 {bad window path name ".x"}}
867test pack-12.39 {command options and errors} {
868    pack forget .pack.a .pack.b .pack.c .pack.d
869    list [catch {pack slaves .pack.a} msg] $msg
870} {0 {}}
871test pack-12.40 {command options and errors} {
872    pack forget .pack.a .pack.b .pack.c .pack.d
873    list [catch {pack lousy .pack} msg] $msg
874} {1 {bad option "lousy": must be configure, forget, info, propagate, or slaves}}
875
876pack .pack.right -side right
877pack .pack.bottom -side bottom
878test pack-13.1 {window deletion} {
879    pack forget .pack.a .pack.b .pack.c .pack.d
880    pack .pack.a .pack.d .pack.b .pack.c -side top
881    update
882    destroy .pack.d
883    update
884    set result [list [pack slaves .pack] [winfo geometry .pack.a] \
885	    [winfo geometry .pack.b] [winfo geometry .pack.c]]
886} {{.pack.right .pack.bottom .pack.a .pack.b .pack.c} 20x40+30+0 50x30+15+40 80x80+0+70}
887
888test pack-14.1 {respond to changes in expansion} {
889    pack forget .pack.a .pack.b .pack.c .pack.d
890    wm geom .pack {}
891    pack .pack.a
892    update
893    set result [winfo geom .pack.a]
894    wm geom .pack 400x300
895    update
896    lappend result [winfo geom .pack.a]
897    pack .pack.a -expand true -fill both
898    update
899    lappend result [winfo geom .pack.a]
900} {20x40+0+0 20x40+90+0 200x150+0+0}
901wm geom .pack {}
902
903test pack-15.1 {managing geometry with -in option} {
904    pack forget .pack.a .pack.b .pack.c .pack.d
905    pack .pack.a -side top
906    frame .pack.f
907    lower .pack.f
908    pack .pack.f -side top
909    frame .pack.f.f2
910    lower .pack.f.f2
911    pack .pack.f.f2 -side top
912    pack .pack.b -in .pack.f.f2
913    update
914    set result [winfo geom .pack.b]
915    pack unpack .pack.a
916    update
917    lappend result [winfo geom .pack.b]
918} {50x30+0+40 50x30+0+0}
919catch {destroy .pack.f}
920test pack-15.2 {managing geometry with -in option} {
921    pack forget .pack.a .pack.b .pack.c .pack.d
922    frame .pack.f
923    lower .pack.f
924    pack .pack.a -in .pack.f -side top
925    update
926    set result [winfo ismapped .pack.a]
927    place .pack.f -x 30 -y 45
928    update
929    lappend result [winfo ismapped .pack.a] [winfo geometry .pack.a]
930    place forget .pack.f
931    update
932    lappend result [winfo ismapped .pack.a]
933} {0 1 20x40+30+45 0}
934catch {destroy .pack.f}
935test pack-15.3 {managing geometry with -in option} {
936    pack forget .pack.a .pack.b .pack.c .pack.d
937    pack .pack.a -side top
938    frame .pack.f
939    lower .pack.f
940    pack .pack.f -side top
941    frame .pack.f.f2
942    lower .pack.f.f2
943    pack .pack.f.f2 -side top
944    pack .pack.b -in .pack.f.f2
945    update
946    set result [winfo ismapped .pack.b]
947    pack unpack .pack.f
948    update
949    lappend result [winfo ismapped .pack.b]
950} {1 0}
951catch {destroy .pack.f}
952test pack-15.4 {managing geometry with -in option} {
953    pack forget .pack.a .pack.b .pack.c .pack.d
954    foreach i {1 2} {
955	frame .pack.f$i -width 100 -height 40 -bd 2 -relief raised
956	lower .pack.f$i
957	pack propagate .pack.f$i 0
958	pack .pack.f$i -side top
959    }
960    pack .pack.b -in .pack.f1 -side right
961    update
962    set result {}
963    lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
964    pack .pack.b -in .pack.f2 -side bottom
965    update
966    lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
967    .pack.f1 configure -width 50 -height 20
968    update
969    lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
970    pack forget .pack.b
971    update
972    lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
973} {50x30+48+5 1 50x30+25+48 1 50x30+25+28 1 50x30+25+28 0}
974catch {destroy .pack.f1 .pack.f2}
975test pack-15.5 {managing geometry with -in option} {
976    pack forget .pack.a .pack.b .pack.c .pack.d
977    foreach i {1 2} {
978	frame .pack.f$i -width 100 -height 20 -bd 2 -relief raised
979	lower .pack.f$i
980	pack propagate .pack.f$i 0
981	pack .pack.f$i -side top
982    }
983    pack .pack.b -in .pack.f2 -side top
984    update
985    set result {}
986    lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
987    pack .pack.a -before .pack.b -side top
988    update
989    lappend result [winfo geometry .pack.b] [winfo ismapped .pack.b]
990} {50x16+25+22 1 50x16+25+22 0}
991catch {destroy .pack.f1 .pack.f2}
992
993test pack-16.1 {geometry manager name} {
994    pack forget .pack.a .pack.b .pack.c .pack.d
995    set result {}
996    lappend result [winfo manager .pack.a]
997    pack .pack.a
998    lappend result [winfo manager .pack.a]
999    pack forget .pack.a
1000    lappend result [winfo manager .pack.a]
1001} {{} pack {}}
1002
1003test pack-17.1 {PackLostSlaveProc procedure} {
1004    pack forget .pack.a .pack.b .pack.c .pack.d
1005    pack .pack.a
1006    update
1007    place .pack.a -x 40 -y 10
1008    update
1009    list [winfo manager .pack.a] [winfo geometry .pack.a] \
1010	[catch {pack info .pack.a} msg] $msg
1011} {place 20x40+40+10 1 {window ".pack.a" isn't packed}}
1012
1013test pack-18.1 {unmap slaves when master unmapped} {tempNotPc} {
1014
1015    # adjust the position of .pack before test to avoid a screen switch
1016    # that occurs with window managers that have desktops four times as big
1017    # as the screen (screen switch causes scale and other tests to fail).
1018
1019    wm geometry .pack +100+100
1020
1021    # On the PC, when the width/height is configured while the window is 
1022    # unmapped, the changes don't take effect until the window is remapped.
1023    # Who knows why?
1024
1025    eval destroy [winfo child .pack]
1026    frame .pack.a -width 100 -height 50 -relief raised -bd 2
1027    pack .pack.a
1028    update
1029    set result [winfo ismapped .pack.a]
1030    wm iconify .pack
1031    update
1032    lappend result [winfo ismapped .pack.a]
1033    .pack.a configure -width 200 -height 75
1034    update
1035    lappend result [winfo width .pack.a ] [winfo height .pack.a] \
1036	[winfo ismapped .pack.a]
1037    wm deiconify .pack
1038    update
1039    lappend result [winfo ismapped .pack.a]
1040} {1 0 200 75 0 1}
1041test pack-18.2 {unmap slaves when master unmapped} {
1042
1043    # adjust the position of .pack before test to avoid a screen switch
1044    # that occurs with window managers that have desktops four times as big
1045    # as the screen (screen switch causes scale and other tests to fail).
1046
1047    wm geometry .pack +100+100
1048    eval destroy [winfo child .pack]
1049    frame .pack.a -relief raised -bd 2
1050    frame .pack.b -width 70 -height 30 -relief sunken -bd 2
1051    pack .pack.a
1052    pack .pack.b -in .pack.a
1053    update
1054    set result [winfo ismapped .pack.b]
1055    wm iconify .pack
1056    update
1057    lappend result [winfo ismapped .pack.b]
1058    .pack.b configure -width 100 -height 30
1059    update
1060    lappend result [winfo width .pack.b ] [winfo height .pack.b] \
1061	[winfo ismapped .pack.b]
1062    wm deiconify .pack
1063    update
1064    lappend result [winfo ismapped .pack.b]
1065} {1 0 100 30 0 1}
1066
1067test pack-19.1 {test respect for internalborder} {
1068    catch {eval pack forget [pack slaves .pack]}
1069    destroy .pack.l .pack.lf
1070    wm geometry .pack 200x200
1071    frame .pack.l -width 15 -height 10
1072    labelframe .pack.lf -labelwidget .pack.l
1073    pack .pack.lf -fill both -expand 1
1074    frame .pack.lf.f
1075    pack .pack.lf.f -fill both -expand 1
1076    update
1077    set res [list [winfo geometry .pack.lf.f]]
1078    .pack.lf configure -labelanchor e -padx 3 -pady 5
1079    update
1080    lappend res [winfo geometry .pack.lf.f]
1081    destroy .pack.l .pack.lf
1082    set res
1083} {196x188+2+10 177x186+5+7}
1084test pack-19.2 {test support for minreqsize} {
1085    catch {eval pack forget [pack slaves .pack]}
1086    destroy .pack.l .pack.lf
1087    wm geometry .pack {}
1088    frame .pack.l -width 150 -height 100
1089    labelframe .pack.lf -labelwidget .pack.l
1090    pack .pack.lf -fill both -expand 1
1091    frame .pack.lf.f -width 20 -height 25
1092    pack .pack.lf.f
1093    update
1094    set res [list [winfo geometry .pack.lf]]
1095    .pack.lf configure -labelanchor ws
1096    update
1097    lappend res [winfo geometry .pack.lf]
1098    destroy .pack.l .pack.lf
1099    set res
1100} {162x127+0+0 172x112+0+0}
1101
1102destroy .pack
1103foreach i {pack1 pack2 pack3 pack4} {
1104    rename $i {}
1105}
1106
1107# cleanup
1108::tcltest::cleanupTests
1109return
1110