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