534 lines
15 KiB
Plaintext
534 lines
15 KiB
Plaintext
# This file is a Tcl script to test out the "place" command. It is
|
|
# organized in the standard fashion for Tcl tests.
|
|
#
|
|
# Copyright (c) 1995 Sun Microsystems, Inc.
|
|
# Copyright (c) 1998-1999 by Scriptics Corporation.
|
|
# All rights reserved.
|
|
|
|
package require tcltest 2.2
|
|
namespace import ::tcltest::*
|
|
eval tcltest::configure $argv
|
|
tcltest::loadTestedCommands
|
|
|
|
# Used for constraining memory leak tests
|
|
testConstraint memory [llength [info commands memory]]
|
|
|
|
testConstraint failsOnUbuntu [expr {![info exists ::env(CI)] || ![string match Linux $::tcl_platform(os)]}]
|
|
testConstraint failsOnXQuarz [expr {$tcl_platform(os) ne "Darwin" || [tk windowingsystem] ne "x11" }]
|
|
|
|
# XXX - This test file is woefully incomplete. At present, only a
|
|
# few of the features are tested.
|
|
|
|
# Widgets used in tests 1.* - 8.*
|
|
toplevel .t -width 300 -height 200 -bd 0
|
|
wm geom .t +0+0
|
|
frame .t.f -width 154 -height 84 -bd 2 -relief raised
|
|
place .t.f -x 48 -y 38
|
|
frame .t.f2 -width 30 -height 60 -bd 2 -relief raised
|
|
update
|
|
|
|
test place-1.1 {Tk_PlaceCmd procedure, "info" option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -x 0
|
|
place info .t.f2
|
|
} -result {-in .t -x 0 -relx 0 -y 0 -rely 0 -width {} -relwidth {} -height {} -relheight {} -anchor nw -bordermode inside}
|
|
test place-1.2 {Tk_PlaceCmd procedure, "info" option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -x 1 -y 2 -width 3 -height 4 -relx 0.1 -rely 0.2 \
|
|
-relwidth 0.3 -relheight 0.4 -anchor se -in .t.f \
|
|
-bordermode outside
|
|
place info .t.f2
|
|
} -result {-in .t.f -x 1 -relx 0.1 -y 2 -rely 0.2 -width 3 -relwidth 0.3 -height 4 -relheight 0.4 -anchor se -bordermode outside}
|
|
test place-1.3 {Tk_PlaceCmd procedure, "info" option} -setup {
|
|
place forget .t.f2
|
|
destroy .t.a.b
|
|
} -body {
|
|
# Make sure the result is built as a proper list by using a space in parent
|
|
frame ".t.a b"
|
|
place .t.f2 -x 1 -y 2 -width {} -height 4 -relx 0.2 -rely 0.2 \
|
|
-relwidth 0.3 -relheight {} -anchor w -in ".t.a b" \
|
|
-bordermode ignore
|
|
place info .t.f2
|
|
} -cleanup {
|
|
destroy ".t.a.b"
|
|
} -result {-in {.t.a b} -x 1 -relx 0.2 -y 2 -rely 0.2 -width {} -relwidth 0.3 -height 4 -relheight {} -anchor w -bordermode ignore}
|
|
|
|
|
|
test place-2.1 {ConfigureContent procedure, -height option} -body {
|
|
place .t.f2 -height abcd
|
|
} -returnCodes error -result {bad screen distance "abcd"}
|
|
test place-2.2 {ConfigureContent procedure, -height option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -height 40
|
|
update
|
|
winfo height .t.f2
|
|
} -result {40}
|
|
test place-2.3 {ConfigureContent procedure, -height option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -height 120
|
|
update
|
|
place .t.f2 -height {}
|
|
update
|
|
winfo height .t.f2
|
|
} -result {60}
|
|
|
|
|
|
test place-3.1 {ConfigureContent procedure, -relheight option} -body {
|
|
place .t.f2 -relheight abcd
|
|
} -returnCodes error -result {expected floating-point number but got "abcd"}
|
|
test place-3.2 {ConfigureContent procedure, -relheight option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -relheight .5
|
|
update
|
|
winfo height .t.f2
|
|
} -result {40}
|
|
test place-3.3 {ConfigureContent procedure, -relheight option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -relheight .8
|
|
update
|
|
place .t.f2 -relheight {}
|
|
update
|
|
winfo height .t.f2
|
|
} -result {60}
|
|
|
|
|
|
test place-4.1 {ConfigureContent procedure, bad -in options} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f2
|
|
} -returnCodes error -result {can't place .t.f2 relative to itself}
|
|
test place-4.2 {ConfigureContent procedure, bad -in option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
set result [list [winfo manager .t.f2]]
|
|
catch {place .t.f2 -in .t.f2}
|
|
lappend result [winfo manager .t.f2]
|
|
} -result {{} {}}
|
|
test place-4.3 {ConfigureContent procedure, bad -in option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
winfo manager .t.f2
|
|
place .t.f2 -in .t.f2
|
|
} -returnCodes error -result {can't place .t.f2 relative to itself}
|
|
test place-4.4 {ConfigureContent procedure, bad -in option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .
|
|
} -returnCodes error -result {can't place .t.f2 relative to .}
|
|
test place-4.5 {ConfigureContent procedure, bad -in option} -setup {
|
|
} -body {
|
|
frame .t.f1
|
|
place .t.f1 -in .t.f1
|
|
} -returnCodes error -result {can't place .t.f1 relative to itself}
|
|
test place-4.6 {prevent management loops} -setup {
|
|
place forget .t.f1
|
|
} -body {
|
|
place .t.f1 -in .t.f2
|
|
place .t.f2 -in .t.f1
|
|
} -returnCodes error -result {can't put .t.f2 inside .t.f1, would cause management loop}
|
|
test place-4.7 {prevent management loops} -setup {
|
|
place forget .t.f1
|
|
place forget .t.f2
|
|
} -body {
|
|
frame .t.f3
|
|
place .t.f1 -in .t.f2
|
|
place .t.f2 -in .t.f3
|
|
place .t.f3 -in .t.f1
|
|
} -returnCodes error -result {can't put .t.f3 inside .t.f1, would cause management loop}
|
|
|
|
test place-5.1 {ConfigureContent procedure, -relwidth option} -body {
|
|
place .t.f2 -relwidth abcd
|
|
} -returnCodes error -result {expected floating-point number but got "abcd"}
|
|
test place-5.2 {ConfigureContent procedure, -relwidth option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -relwidth .5
|
|
update
|
|
winfo width .t.f2
|
|
} -result {75}
|
|
test place-5.3 {ConfigureContent procedure, -relwidth option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -relwidth .8
|
|
update
|
|
place .t.f2 -relwidth {}
|
|
update
|
|
winfo width .t.f2
|
|
} -result {30}
|
|
|
|
test place-6.1 {ConfigureContent procedure, -width option} -body {
|
|
place .t.f2 -width abcd
|
|
} -returnCodes error -result {bad screen distance "abcd"}
|
|
test place-6.2 {ConfigureContent procedure, -width option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -width 100
|
|
update
|
|
winfo width .t.f2
|
|
} -result {100}
|
|
test place-6.3 {ConfigureContent procedure, -width option} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -width 120
|
|
update
|
|
place .t.f2 -width {}
|
|
update
|
|
winfo width .t.f2
|
|
} -result {30}
|
|
|
|
|
|
test place-7.1 {ReconfigurePlacement procedure, computing position} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -x -2 -relx .5 -y 3 -rely .4
|
|
update
|
|
winfo geometry .t.f2
|
|
} -result {30x60+123+75}
|
|
test place-7.2 {ReconfigurePlacement procedure, position rounding} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -x -1.4 -y -2.3
|
|
update
|
|
winfo geometry .t.f2
|
|
} -result {30x60+49+38}
|
|
test place-7.3 {ReconfigurePlacement procedure, position rounding} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -x 1.4 -y 2.3
|
|
update
|
|
winfo geometry .t.f2
|
|
} -result {30x60+51+42}
|
|
test place-7.4 {ReconfigurePlacement procedure, position rounding} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -x -1.6 -y -2.7
|
|
update
|
|
winfo geometry .t.f2
|
|
} -result {30x60+48+37}
|
|
test place-7.5 {ReconfigurePlacement procedure, position rounding} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -x 1.6 -y 2.7
|
|
update
|
|
winfo geometry .t.f2
|
|
} -result {30x60+52+43}
|
|
test place-7.6 {ReconfigurePlacement procedure, position rounding} -setup {
|
|
destroy .t.f3
|
|
} -body {
|
|
frame .t.f3 -width 100 -height 100 -bg #f00000 -bd 0
|
|
place .t.f3 -x 0 -y 0
|
|
raise .t.f2
|
|
place forget .t.f2
|
|
place .t.f2 -in .t.f3 -relx .303 -rely .406 -relwidth .304 -relheight .206
|
|
update
|
|
winfo geometry .t.f2
|
|
} -cleanup {
|
|
destroy .t.f3
|
|
} -result {31x20+30+41}
|
|
test place-7.7 {ReconfigurePlacement procedure, computing size} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -width 120 -height 89
|
|
update
|
|
list [winfo width .t.f2] [winfo height .t.f2]
|
|
} -result {120 89}
|
|
test place-7.8 {ReconfigurePlacement procedure, computing size} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -relwidth .4 -relheight .5
|
|
update
|
|
list [winfo width .t.f2] [winfo height .t.f2]
|
|
} -result {60 40}
|
|
test place-7.9 {ReconfigurePlacement procedure, computing size} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -width 10 -relwidth .4 -height -4 -relheight .5
|
|
update
|
|
list [winfo width .t.f2] [winfo height .t.f2]
|
|
} -result {70 36}
|
|
test place-7.10 {ReconfigurePlacement procedure, computing size} -setup {
|
|
place forget .t.f2
|
|
} -body {
|
|
place .t.f2 -in .t.f -width 10 -relwidth .4 -height -4 -relheight .5
|
|
place .t.f2 -width {} -relwidth {} -height {} -relheight {}
|
|
update
|
|
list [winfo width .t.f2] [winfo height .t.f2]
|
|
} -result {30 60}
|
|
|
|
if {[tk windowingsystem] ne "aqua"} {
|
|
proc placeUpdate {} {
|
|
update
|
|
}
|
|
} else {
|
|
proc placeUpdate {} {
|
|
}
|
|
}
|
|
|
|
test place-8.1 {PlaceStructureProc, mapping and unmapping content} -constraints {failsOnUbuntu failsOnXQuarz} -setup {
|
|
place forget .t.f2
|
|
place forget .t.f
|
|
} -body {
|
|
place .t.f2 -relx 1.0 -rely 1.0 -anchor sw
|
|
update idletasks
|
|
set result [winfo ismapped .t.f2]
|
|
wm iconify .t
|
|
lappend result [winfo ismapped .t.f2]
|
|
place .t.f2 -x 40 -y 30 -relx 0 -rely 0 -anchor nw
|
|
update idletasks
|
|
lappend result [winfo x .t.f2] [winfo y .t.f2] [winfo ismapped .t.f2]
|
|
wm deiconify .t
|
|
placeUpdate
|
|
lappend result [winfo ismapped .t.f2]
|
|
} -result {1 0 40 30 0 1}
|
|
test place-8.2 {PlaceStructureProc, mapping and unmapping content} -constraints {failsOnUbuntu failsOnXQuarz} -setup {
|
|
place forget .t.f2
|
|
place forget .t.f
|
|
update idletasks
|
|
} -body {
|
|
place .t.f -x 0 -y 0 -width 200 -height 100
|
|
place .t.f2 -in .t.f -relx 1.0 -rely 1.0 -anchor sw -width 50 -height 20
|
|
update idletasks
|
|
set result [winfo ismapped .t.f2]
|
|
wm iconify .t
|
|
lappend result [winfo ismapped .t.f2]
|
|
place .t.f2 -x 40 -y 30 -relx 0 -rely 0 -anchor nw
|
|
update idletasks
|
|
lappend result [winfo x .t.f2] [winfo y .t.f2] [winfo ismapped .t.f2]
|
|
wm deiconify .t
|
|
placeUpdate
|
|
lappend result [winfo ismapped .t.f2]
|
|
} -result {1 0 42 32 0 1}
|
|
destroy .t
|
|
|
|
|
|
test place-9.1 {PlaceObjCmd} -body {
|
|
place
|
|
} -returnCodes error -result {wrong # args: should be "place option|pathName args"}
|
|
test place-9.2 {PlaceObjCmd} -body {
|
|
place foo
|
|
} -returnCodes error -result {wrong # args: should be "place option|pathName args"}
|
|
test place-9.3 {PlaceObjCmd} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
place .foo bar
|
|
} -returnCodes error -result {bad window path name ".foo"}
|
|
test place-9.4 {PlaceObjCmd} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
place bar .foo
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes error -result {bad window path name ".foo"}
|
|
test place-9.5 {PlaceObjCmd} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place badopt .foo
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes error -result {bad option "badopt": must be configure, content, forget, info, or slaves}
|
|
test place-9.6 {PlaceObjCmd, configure errors} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place configure .foo
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes ok -result {}
|
|
test place-9.7 {PlaceObjCmd, configure errors} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place configure .foo bar
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes ok -result {}
|
|
test place-9.8 {PlaceObjCmd, configure} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place .foo -x 0 -y 0
|
|
place configure .foo
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -result [list {-anchor {} {} nw nw} {-bordermode {} {} inside inside} {-height {} {} {} {}} {-in {} {} {} .} {-relheight {} {} {} {}} {-relwidth {} {} {} {}} {-relx {} {} 0 0.0} {-rely {} {} 0 0.0} {-width {} {} {} {}} {-x {} {} 0 0} {-y {} {} 0 0}]
|
|
test place-9.9 {PlaceObjCmd, configure} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place .foo -x 0 -y 0
|
|
place configure .foo -x
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -result {-x {} {} 0 0}
|
|
test place-9.10 {PlaceObjCmd, forget errors} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place forget .foo bar
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes error -result {wrong # args: should be "place forget pathName"}
|
|
test place-9.11 {PlaceObjCmd, info errors} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place info .foo bar
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes error -result {wrong # args: should be "place info pathName"}
|
|
test place-9.12 {PlaceObjCmd, content errors} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place content .foo bar
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes error -result {wrong # args: should be "place content pathName"}
|
|
|
|
|
|
test place-10.1 {ConfigureContent} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place .foo -badopt
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes error -result {unknown option "-badopt"}
|
|
test place-10.2 {ConfigureContent} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place .foo -anchor
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes error -result {value for "-anchor" missing}
|
|
test place-10.3 {ConfigureContent} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place .foo -bordermode j
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes error -result {bad bordermode "j": must be inside, outside, or ignore}
|
|
test place-10.4 {ConfigureContent} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place configure .foo -x 0 -y
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -returnCodes error -result {value for "-y" missing}
|
|
|
|
|
|
test place-11.1 {PlaceObjCmd, content command} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place content .foo
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -result {}
|
|
test place-11.2 {PlaceObjCmd, content command} -setup {
|
|
destroy .foo .bar
|
|
} -body {
|
|
frame .foo
|
|
frame .bar
|
|
place .bar -in .foo
|
|
place content .foo
|
|
} -cleanup {
|
|
destroy .foo .bar
|
|
} -result [list .bar]
|
|
|
|
|
|
test place-12.1 {PlaceObjCmd, forget command} -setup {
|
|
destroy .foo
|
|
} -body {
|
|
frame .foo
|
|
place .foo -width 50 -height 50
|
|
update
|
|
set res [winfo ismapped .foo]
|
|
place forget .foo
|
|
update
|
|
lappend res [winfo ismapped .foo]
|
|
} -cleanup {
|
|
destroy .foo
|
|
} -result {1 0}
|
|
|
|
|
|
test place-13.1 {test respect for internalborder} -setup {
|
|
destroy .pack
|
|
} -body {
|
|
toplevel .pack
|
|
wm geometry .pack 200x200
|
|
frame .pack.l -width 15 -height 10
|
|
labelframe .pack.lf -labelwidget .pack.l
|
|
pack .pack.lf -fill both -expand 1
|
|
frame .pack.lf.f
|
|
place .pack.lf.f -x 0 -y 0 -relwidth 1.0 -relheight 1.0
|
|
update
|
|
set res [list [winfo geometry .pack.lf.f]]
|
|
.pack.lf configure -labelanchor e -padx 3 -pady 5
|
|
update
|
|
lappend res [winfo geometry .pack.lf.f]
|
|
} -cleanup {
|
|
destroy .pack
|
|
} -result {196x188+2+10 177x186+5+7}
|
|
|
|
|
|
test place-14.1 {memory leak testing} -constraints memory -setup {
|
|
destroy .f
|
|
proc getbytes {} {
|
|
set lines [split [memory info] "\n"]
|
|
lindex [lindex $lines 3] 3
|
|
}
|
|
# Repeat each body checking that memory does not increase
|
|
proc stress {args} {
|
|
set res {}
|
|
foreach body $args {
|
|
set end 0
|
|
for {set i 0} {$i < 5} {incr i} {
|
|
uplevel 1 $body
|
|
set tmp $end
|
|
set end [getbytes]
|
|
}
|
|
lappend res [expr {$end - $tmp}]
|
|
}
|
|
return $res
|
|
}
|
|
} -body {
|
|
# Test all manners of forgetting content
|
|
frame .f
|
|
frame .f.f
|
|
stress {
|
|
place .f.f -x [expr {1 + 1}] -y [expr {2 + 2}]
|
|
place forget .f.f
|
|
} {
|
|
place .f.f -x [expr {1 + 1}] -y [expr {2 + 2}]
|
|
pack .f.f
|
|
} {
|
|
place .f.f -x [expr {1 + 1}] -y [expr {2 + 2}]
|
|
destroy .f
|
|
frame .f
|
|
frame .f.f
|
|
}
|
|
} -cleanup {
|
|
destroy .f
|
|
rename getbytes {}
|
|
rename stress {}
|
|
} -result {0 0 0}
|
|
|
|
|
|
# cleanup
|
|
cleanupTests
|
|
return
|
|
|
|
|
|
|