1# This file is a Tcl script to test out the old syntax of Tk's
2# "pack" command (before release 3.3).  It is organized in the
3# standard fashion for Tcl tests.
4#
5# Copyright (c) 1991-1994 The Regents of the University of California.
6# Copyright (c) 1994 Sun Microsystems, Inc.
7# Copyright (c) 1998-1999 by Scriptics Corporation.
8# All rights reserved.
9#
10# RCS: @(#) $Id: oldpack.test,v 1.5 2002/07/13 20:28:35 dgp Exp $
11
12package require tcltest 2.1
13namespace import -force tcltest::configure
14namespace import -force tcltest::testsDirectory
15configure -testdir [file join [pwd] [file dirname [info script]]]
16configure -loadfile [file join [testsDirectory] constraints.tcl]
17tcltest::loadTestedCommands
18
19# First, test a single window packed in various ways in a parent
20
21catch {destroy .pack}
22frame .pack
23place .pack -width 100 -height 100
24frame .pack.red -width 10 -height 20
25label .pack.red.l -text R -bd 2 -relief raised
26place .pack.red.l -relwidth 1.0 -relheight 1.0
27frame .pack.green -width 30 -height 40
28label .pack.green.l -text G -bd 2 -relief raised
29place .pack.green.l -relwidth 1.0 -relheight 1.0
30frame .pack.blue -width 40 -height 40
31label .pack.blue.l -text B -bd 2 -relief raised
32place .pack.blue.l -relwidth 1.0 -relheight 1.0
33frame .pack.violet -width 80 -height 20
34label .pack.violet.l -text P -bd 2 -relief raised
35place .pack.violet.l -relwidth 1.0 -relheight 1.0
36
37test pack-1.1 {basic positioning} {
38    pack ap .pack .pack.red top
39    update
40    winfo geometry .pack.red
41} 10x20+45+0
42test pack-1.2 {basic positioning} {
43    pack append .pack .pack.red bottom
44    update
45    winfo geometry .pack.red
46} 10x20+45+80
47test pack-1.3 {basic positioning} {
48    pack append .pack .pack.red left
49    update
50    winfo geometry .pack.red
51} 10x20+0+40
52test pack-1.4 {basic positioning} {
53    pack append .pack .pack.red right
54    update
55    winfo geometry .pack.red
56} 10x20+90+40
57
58# Try adding padding around the window and make sure that the
59# window gets a larger frame.
60
61test pack-2.1 {padding} {
62    pack append .pack .pack.red {t padx 20}
63    update
64    winfo geometry .pack.red
65} 10x20+45+0
66test pack-2.2 {padding} {
67    pack append .pack .pack.red {top pady 20}
68    update
69    winfo geometry .pack.red
70} 10x20+45+10
71test pack-2.3 {padding} {
72    pack append .pack .pack.red {l padx 20}
73    update
74    winfo geometry .pack.red
75} 10x20+10+40
76test pack-2.4 {padding} {
77    pack append .pack .pack.red {left pady 20}
78    update
79    winfo geometry .pack.red
80} 10x20+0+40
81
82# Position the window at different positions in its frame to
83# make sure they all work.  Try two differenet frame locations,
84# to make sure that frame offsets are being added in correctly.
85
86test pack-3.1 {framing} {
87    pack append .pack .pack.red {b padx 20 pady 30}
88    update
89    winfo geometry .pack.red
90} 10x20+45+65
91test pack-3.2 {framing} {
92    pack append .pack .pack.red {bottom padx 20 pady 30 fr n}
93    update
94    winfo geometry .pack.red
95} 10x20+45+50
96test pack-3.3 {framing} {
97    pack append .pack .pack.red {bottom padx 20 pady 30 frame ne}
98    update
99    winfo geometry .pack.red
100} 10x20+90+50
101test pack-3.4 {framing} {
102    pack append .pack .pack.red {bottom padx 20 pady 30 frame e}
103    update
104    winfo geometry .pack.red
105} 10x20+90+65
106test pack-3.5 {framing} {
107    pack append .pack .pack.red {bottom padx 20 pady 30 frame se}
108    update
109    winfo geometry .pack.red
110} 10x20+90+80
111test pack-3.6 {framing} {
112    pack append .pack .pack.red {bottom padx 20 pady 30 frame s}
113    update
114    winfo geometry .pack.red
115} 10x20+45+80
116test pack-3.7 {framing} {
117    pack append .pack .pack.red {bottom padx 20 pady 30 frame sw}
118    update
119    winfo geometry .pack.red
120} 10x20+0+80
121test pack-3.8 {framing} {
122    pack append .pack .pack.red {bottom padx 20 pady 30 frame w}
123    update
124    winfo geometry .pack.red
125} 10x20+0+65
126test pack-3.9 {framing} {
127    pack append .pack .pack.red {bottom padx 20 pady 30 frame nw}
128    update
129    winfo geometry .pack.red
130} 10x20+0+50
131test pack-3.10 {framing} {
132    pack append .pack .pack.red {bottom padx 20 pady 30 frame c}
133    update
134    winfo geometry .pack.red
135} 10x20+45+65
136test pack-3.11 {framing} {
137    pack append .pack .pack.red {r padx 20 pady 30}
138    update
139    winfo geometry .pack.red
140} 10x20+80+40
141test pack-3.12 {framing} {
142    pack append .pack .pack.red {right padx 20 pady 30 frame n}
143    update
144    winfo geometry .pack.red
145} 10x20+80+0
146test pack-3.13 {framing} {
147    pack append .pack .pack.red {right padx 20 pady 30 frame ne}
148    update
149    winfo geometry .pack.red
150} 10x20+90+0
151test pack-3.14 {framing} {
152    pack append .pack .pack.red {right padx 20 pady 30 frame e}
153    update
154    winfo geometry .pack.red
155} 10x20+90+40
156test pack-3.15 {framing} {
157    pack append .pack .pack.red {right padx 20 pady 30 frame se}
158    update
159    winfo geometry .pack.red
160} 10x20+90+80
161test pack-3.16 {framing} {
162    pack append .pack .pack.red {right padx 20 pady 30 frame s}
163    update
164    winfo geometry .pack.red
165} 10x20+80+80
166test pack-3.17 {framing} {
167    pack append .pack .pack.red {right padx 20 pady 30 frame sw}
168    update
169    winfo geometry .pack.red
170} 10x20+70+80
171test pack-3.18 {framing} {
172    pack append .pack .pack.red {right padx 20 pady 30 frame w}
173    update
174    winfo geometry .pack.red
175} 10x20+70+40
176test pack-3.19 {framing} {
177    pack append .pack .pack.red {right padx 20 pady 30 frame nw}
178    update
179    winfo geometry .pack.red
180} 10x20+70+0
181test pack-3.20 {framing} {
182    pack append .pack .pack.red {right padx 20 pady 30 frame center}
183    update
184    winfo geometry .pack.red
185} 10x20+80+40
186
187# Try out various filling combinations in a couple of different
188# frame locations.
189
190test pack-4.1 {filling} {
191    pack append .pack .pack.red {bottom padx 20 pady 30 fillx}
192    update
193    winfo geometry .pack.red
194} 100x20+0+65
195test pack-4.2 {filling} {
196    pack append .pack .pack.red {bottom padx 20 pady 30 filly}
197    update
198    winfo geometry .pack.red
199} 10x50+45+50
200test pack-4.3 {filling} {
201    pack append .pack .pack.red {bottom padx 20 pady 30 fill}
202    update
203    winfo geometry .pack.red
204} 100x50+0+50
205test pack-4.4 {filling} {
206    pack append .pack .pack.red {right padx 20 pady 30 fillx}
207    update
208    winfo geometry .pack.red
209} 30x20+70+40
210test pack-4.5 {filling} {
211    pack append .pack .pack.red {right padx 20 pady 30 filly}
212    update
213    winfo geometry .pack.red
214} 10x100+80+0
215test pack-4.6 {filling} {
216    pack append .pack .pack.red {right padx 20 pady 30 fill}
217    update
218    winfo geometry .pack.red
219} 30x100+70+0
220
221# Multiple windows:  make sure that space is properly subtracted
222# from the cavity as windows are positioned inwards from all
223# different sides.  Also make sure that windows get unmapped if
224# there isn't enough space for them.
225
226pack append .pack .pack.red top .pack.green top .pack.blue top \
227	.pack.violet top
228update
229test pack-5.1 {multiple windows} {winfo geometry .pack.red} 10x20+45+0
230test pack-5.2 {multiple windows} {winfo geometry .pack.green} 30x40+35+20
231test pack-5.3 {multiple windows} {winfo geometry .pack.blue} 40x40+30+60
232test pack-5.4 {multiple windows} {winfo ismapped .pack.violet} 0
233pack b .pack.blue .pack.violet top
234update
235test pack-5.5 {multiple windows} {winfo ismapped .pack.violet} 1
236test pack-5.6 {multiple windows} {winfo geometry .pack.violet} 80x20+10+60
237test pack-5.7 {multiple windows} {winfo geometry .pack.blue} 40x20+30+80
238pack after .pack.blue .pack.red top
239update
240test pack-5.8 {multiple windows} {winfo geometry .pack.green} 30x40+35+0
241test pack-5.9 {multiple windows} {winfo geometry .pack.violet} 80x20+10+40
242test pack-5.10 {multiple windows} {winfo geometry .pack.blue} 40x40+30+60
243test pack-5.11 {multiple windows} {winfo ismapped .pack.red} 0
244pack before .pack.green .pack.red right .pack.blue left
245update
246test pack-5.12 {multiple windows} {winfo ismapped .pack.red} 1
247test pack-5.13 {multiple windows} {winfo geometry .pack.red} 10x20+90+40
248test pack-5.14 {multiple windows} {winfo geometry .pack.blue} 40x40+0+30
249test pack-5.15 {multiple windows} {winfo geometry .pack.green} 30x40+50+0
250test pack-5.16 {multiple windows} {winfo geometry .pack.violet} 50x20+40+40
251pack append .pack .pack.violet left .pack.green bottom .pack.red bottom \
252	.pack.blue bottom
253update
254test pack-5.17 {multiple windows} {winfo geometry .pack.violet} 80x20+0+40
255test pack-5.18 {multiple windows} {winfo geometry .pack.green} 20x40+80+60
256test pack-5.19 {multiple windows} {winfo geometry .pack.red} 10x20+85+40
257test pack-5.20 {multiple windows} {winfo geometry .pack.blue} 20x40+80+0
258pack after .pack.blue .pack.blue top .pack.red right .pack.green right \
259	.pack.violet right
260update
261test pack-5.21 {multiple windows} {winfo geometry .pack.blue} 40x40+30+0
262test pack-5.22 {multiple windows} {winfo geometry .pack.red} 10x20+90+60
263test pack-5.23 {multiple windows} {winfo geometry .pack.green} 30x40+60+50
264test pack-5.24 {multiple windows} {winfo geometry .pack.violet} 60x20+0+60
265pack after .pack.blue .pack.red left .pack.green left .pack.violet left
266update
267test pack-5.25 {multiple windows} {winfo geometry .pack.blue} 40x40+30+0
268test pack-5.26 {multiple windows} {winfo geometry .pack.red} 10x20+0+60
269test pack-5.27 {multiple windows} {winfo geometry .pack.green} 30x40+10+50
270test pack-5.28 {multiple windows} {winfo geometry .pack.violet} 60x20+40+60
271pack append .pack .pack.violet left .pack.green left .pack.blue left \
272	.pack.red left
273update
274test pack-5.29 {multiple windows} {winfo geometry .pack.violet} 80x20+0+40
275test pack-5.30 {multiple windows} {winfo geometry .pack.green} 20x40+80+30
276test pack-5.31 {multiple windows} {winfo ismapped .pack.blue} 0
277test pack-5.32 {multiple windows} {winfo ismapped .pack.red} 0
278
279
280# Test the ability of the packer to propagate geometry information
281# to its parent.  Make sure it computes the parent's needs both in
282# the direction of packing (width for "left" and "right" windows,
283# for example), and perpendicular to the pack direction (height for
284# "left" and "right" windows).
285
286pack append .pack .pack.red top .pack.green top .pack.blue top \
287	.pack.violet top
288update
289test pack-6.1 {geometry propagation} {winfo reqwidth .pack} 80
290test pack-6.2 {geometry propagation} {winfo reqheight .pack} 120
291destroy .pack.violet
292update
293test pack-6.3 {geometry propagation} {winfo reqwidth .pack} 40
294test pack-6.4 {geometry propagation} {winfo reqheight .pack} 100
295frame .pack.violet -width 80 -height 20 -bg violet
296label .pack.violet.l -text P -bd 2 -relief raised
297place .pack.violet.l -relwidth 1.0 -relheight 1.0
298pack append .pack .pack.red left .pack.green right .pack.blue bottom \
299	.pack.violet top
300update
301test pack-6.5 {geometry propagation} {winfo reqwidth .pack} 120
302test pack-6.6 {geometry propagation} {winfo reqheight .pack} 60
303pack append .pack .pack.violet top .pack.green top .pack.blue left \
304	.pack.red left
305update
306test pack-6.7 {geometry propagation} {winfo reqwidth .pack} 80
307test pack-6.8 {geometry propagation} {winfo reqheight .pack} 100
308
309# Test the "expand" option, and make sure space is evenly divided
310# when several windows request expansion.
311
312pack append .pack .pack.violet top .pack.green {left e} \
313	.pack.blue {left expand} .pack.red {left expand}
314update
315test pack-7.1 {multiple expanded windows} {
316    pack append .pack .pack.violet top .pack.green {left e} \
317	    .pack.blue {left expand} .pack.red {left expand}
318    update
319    list [winfo geometry .pack.green] [winfo geometry .pack.blue] \
320	    [winfo geometry .pack.red]
321} {30x40+3+40 40x40+39+40 10x20+86+50}
322test pack-7.2 {multiple expanded windows} {
323    pack append .pack .pack.green left .pack.violet {bottom expand} \
324	    .pack.blue {bottom expand} .pack.red {bottom expand}
325    update
326    list [winfo geometry .pack.violet] [winfo geometry .pack.blue] \
327	    [winfo geometry .pack.red]
328} {70x20+30+77 40x40+45+30 10x20+60+3}
329test pack-7.3 {multiple expanded windows} {
330    foreach i [winfo child .pack] {
331	pack unpack $i
332    }
333    pack append .pack .pack.green {left e fill} .pack.red {left expand fill} \
334	    .pack.blue {top fill}
335    update
336    list [winfo geometry .pack.green] [winfo geometry .pack.red] \
337	    [winfo geometry .pack.blue]
338} {40x100+0+0 20x100+40+0 40x40+60+0}
339test pack-7.4 {multiple expanded windows} {
340    foreach i [winfo child .pack] {
341	pack unpack $i
342    }
343    pack append .pack .pack.red {top expand} .pack.violet {top expand} \
344	    .pack.blue {right fill}
345    update
346    list [winfo geometry .pack.red] [winfo geometry .pack.violet] \
347	    [winfo geometry .pack.blue]
348} {10x20+45+5 80x20+10+35 40x40+60+60}
349test pack-7.5 {multiple expanded windows} {
350    foreach i [winfo child .pack] {
351	pack unpack $i
352    }
353    pack append .pack .pack.green {right frame s} .pack.red {top expand}
354    update
355    list [winfo geometry .pack.green] [winfo geometry .pack.red]
356} {30x40+70+60 10x20+30+40}
357test pack-7.6 {multiple expanded windows} {
358    foreach i [winfo child .pack] {
359	pack unpack $i
360    }
361    pack append .pack .pack.violet {bottom frame e} .pack.red {right expand}
362    update
363    list [winfo geometry .pack.violet] [winfo geometry .pack.red]
364} {80x20+20+80 10x20+45+30}
365
366# Need more bizarre tests with combinations of expanded windows and
367# windows in opposing directions!  Also, include padding in expanded
368# (and unexpanded) windows.
369
370# Syntax errors on pack commands
371
372test pack-8.1 {syntax errors} {
373    set msg ""
374    set result [catch {pack} msg]
375    concat $result $msg
376} {1 wrong # args: should be "pack option arg ?arg ...?"}
377test pack-8.2 {syntax errors} {
378    set msg ""
379    set result [catch {pack append} msg]
380    concat $result $msg
381} {1 wrong # args: should be "pack option arg ?arg ...?"}
382test pack-8.3 {syntax errors} {
383    set msg ""
384    set result [catch {pack gorp foo} msg]
385    concat $result $msg
386} {1 bad option "gorp": must be configure, forget, info, propagate, or slaves}
387test pack-8.4 {syntax errors} {
388    set msg ""
389    set result [catch {pack a .pack} msg]
390    concat $result $msg
391} {1 bad option "a": must be configure, forget, info, propagate, or slaves}
392test pack-8.5 {syntax errors} {
393    set msg ""
394    set result [catch {pack after foobar} msg]
395    concat $result $msg
396} {1 bad window path name "foobar"}
397test pack-8.6 {syntax errors} {
398    frame .pack.yellow -bg yellow
399    set msg ""
400    set result [catch {pack after .pack.yellow} msg]
401    destroy .pack.yellow
402    concat $result $msg
403} {1 window ".pack.yellow" isn't packed}
404test pack-8.7 {syntax errors} {
405    set msg ""
406    set result [catch {pack append foobar} msg]
407    concat $result $msg
408} {1 bad window path name "foobar"}
409test pack-8.8 {syntax errors} {
410    set msg ""
411    set result [catch {pack before foobar} msg]
412    concat $result $msg
413} {1 bad window path name "foobar"}
414test pack-8.9 {syntax errors} {
415    frame .pack.yellow -bg yellow
416    set msg ""
417    set result [catch {pack before .pack.yellow} msg]
418    destroy .pack.yellow
419    concat $result $msg
420} {1 window ".pack.yellow" isn't packed}
421test pack-8.10 {syntax errors} {
422    set msg ""
423    set result [catch {pack info .pack help} msg]
424    concat $result $msg
425} {1 wrong # args: should be "pack info window"}
426test pack-8.11 {syntax errors} {
427    set msg ""
428    set result [catch {pack info foobar} msg]
429    concat $result $msg
430} {1 bad window path name "foobar"}
431test pack-8.12 {syntax errors} {
432    set msg ""
433    set result [catch {pack append .pack .pack.blue} msg]
434    concat $result $msg
435} {1 wrong # args: window ".pack.blue" should be followed by options}
436test pack-8.13 {syntax errors} {
437    set msg ""
438    set result [catch {pack append . .pack.blue top} msg]
439    concat $result $msg
440} {1 can't pack .pack.blue inside .}
441test pack-8.14 {syntax errors} {
442    set msg ""
443    set result [catch {pack append .pack .pack.blue f} msg]
444    concat $result $msg
445} {1 bad option "f": should be top, bottom, left, right, expand, fill, fillx, filly, padx, pady, or frame}
446test pack-8.15 {syntax errors} {
447    set msg ""
448    set result [catch {pack append .pack .pack.blue pad} msg]
449    concat $result $msg
450} {1 bad option "pad": should be top, bottom, left, right, expand, fill, fillx, filly, padx, pady, or frame}
451test pack-8.16 {syntax errors} {
452    set msg ""
453    set result [catch {pack append .pack .pack.blue {frame south}} msg]
454    concat $result $msg
455} {1 bad anchor "south": must be n, ne, e, se, s, sw, w, nw, or center}
456test pack-8.17 {syntax errors} {
457    set msg ""
458    set result [catch {pack append .pack .pack.blue {padx -2}} msg]
459    concat $result $msg
460} {1 bad pad value "-2": must be positive screen distance}
461test pack-8.18 {syntax errors} {
462    set msg ""
463    set result [catch {pack append .pack .pack.blue {padx}} msg]
464    concat $result $msg
465} {1 wrong # args: "padx" option must be followed by screen distance}
466test pack-8.19 {syntax errors} {
467    set msg ""
468    set result [catch {pack append .pack .pack.blue {pady -2}} msg]
469    concat $result $msg
470} {1 bad pad value "-2": must be positive screen distance}
471test pack-8.20 {syntax errors} {
472    set msg ""
473    set result [catch {pack append .pack .pack.blue {pady}} msg]
474    concat $result $msg
475} {1 wrong # args: "pady" option must be followed by screen distance}
476test pack-8.21 {syntax errors} {
477    set msg ""
478    set result [catch {pack append .pack .pack.blue "\{abc"} msg]
479    concat $result $msg
480} {1 unmatched open brace in list}
481test pack-8.22 {syntax errors} {
482    set msg ""
483    set result [catch {pack append .pack .pack.blue frame} msg]
484    concat $result $msg
485} {1 wrong # args: "frame" option must be followed by anchor point}
486
487# Test "pack info" command output.
488
489test pack-9.1 {information output} {
490    pack append .pack .pack.blue {top fillx frame n} \
491	.pack.red {bottom filly frame s} .pack.green {left fill frame w} \
492	.pack.violet {right expand frame e}
493    list [pack slaves .pack] [pack info .pack.blue] [pack info .pack.red] \
494	    [pack info .pack.green] [pack info .pack.violet]
495} {{.pack.blue .pack.red .pack.green .pack.violet} {-in .pack -anchor n -expand 0 -fill x -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top} {-in .pack -anchor s -expand 0 -fill y -ipadx 0 -ipady 0 -padx 0 -pady 0 -side bottom} {-in .pack -anchor w -expand 0 -fill both -ipadx 0 -ipady 0 -padx 0 -pady 0 -side left} {-in .pack -anchor e -expand 1 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 0 -side right}}
496test pack-9.2 {information output} {
497    pack append .pack .pack.blue {padx 10 frame nw} \
498	.pack.red {pady 20 frame ne} .pack.green {frame se} \
499	.pack.violet {frame sw}
500    list [pack slaves .pack] [pack info .pack.blue] [pack info .pack.red] \
501	    [pack info .pack.green] [pack info .pack.violet]
502} {{.pack.blue .pack.red .pack.green .pack.violet} {-in .pack -anchor nw -expand 0 -fill none -ipadx 0 -ipady 0 -padx 5 -pady 0 -side top} {-in .pack -anchor ne -expand 0 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 10 -side top} {-in .pack -anchor se -expand 0 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top} {-in .pack -anchor sw -expand 0 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top}}
503test pack-9.3 {information output} {
504    pack append .pack .pack.blue {frame center} .pack.red {frame center} \
505	.pack.green {frame c} .pack.violet {frame c}
506    list [pack slaves .pack] [pack info .pack.blue] [pack info .pack.red] \
507	    [pack info .pack.green] [pack info .pack.violet]
508} {{.pack.blue .pack.red .pack.green .pack.violet} {-in .pack -anchor center -expand 0 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top} {-in .pack -anchor center -expand 0 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top} {-in .pack -anchor center -expand 0 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top} {-in .pack -anchor center -expand 0 -fill none -ipadx 0 -ipady 0 -padx 0 -pady 0 -side top}}
509
510catch {destroy .pack}
511
512# cleanup
513::tcltest::cleanupTests
514return
515
516
517
518
519
520
521
522
523
524
525
526
527
528