frame.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:30k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test out the "frame" and "toplevel"
  2. # commands of Tk.  It is organized in the standard fashion for Tcl
  3. # tests.
  4. #
  5. # Copyright (c) 1994 The Regents of the University of California.
  6. # Copyright (c) 1994-1996 Sun Microsystems, Inc.
  7. # Copyright (c) 1998-1999 by Scriptics Corporation.
  8. # All rights reserved.
  9. #
  10. # RCS: @(#) $Id: frame.test,v 1.7.2.1 2003/07/16 23:17:39 pspjuth Exp $
  11. package require tcltest 2.1
  12. namespace import -force tcltest::configure
  13. namespace import -force tcltest::testsDirectory
  14. configure -testdir [file join [pwd] [file dirname [info script]]]
  15. configure -loadfile [file join [testsDirectory] constraints.tcl]
  16. tcltest::loadTestedCommands
  17. # eatColors --
  18. # Creates a toplevel window and allocates enough colors in it to
  19. # use up all the slots in the colormap.
  20. #
  21. # Arguments:
  22. # w - Name of toplevel window to create.
  23. proc eatColors {w} {
  24.     catch {destroy $w}
  25.     toplevel $w
  26.     wm geom $w +0+0
  27.     canvas $w.c -width 400 -height 200 -bd 0
  28.     pack $w.c
  29.     for {set y 0} {$y < 8} {incr y} {
  30. for {set x 0} {$x < 40} {incr x} {
  31.     set color [format #%02x%02x%02x [expr $x*6] [expr $y*30] 0]
  32.     $w.c create rectangle [expr 10*$x] [expr 20*$y] 
  33.     [expr 10*$x + 10] [expr 20*$y + 20] -outline {} 
  34.     -fill $color
  35. }
  36.     }
  37.     update
  38. }
  39. # colorsFree --
  40. #
  41. # Returns 1 if there appear to be free colormap entries in a window,
  42. # 0 otherwise.
  43. #
  44. # Arguments:
  45. # w - Name of window in which to check.
  46. # red, green, blue - Intensities to use in a trial color allocation
  47. # to see if there are colormap entries free.
  48. proc colorsFree {w {red 31} {green 245} {blue 192}} {
  49.     set vals [winfo rgb $w [format #%02x%02x%02x $red $green $blue]]
  50.     expr ([lindex $vals 0]/256 == $red) && ([lindex $vals 1]/256 == $green) 
  51.     && ([lindex $vals 2]/256 == $blue)
  52. }
  53. test frame-1.1 {frame configuration options} {
  54.     frame .f -class NewFrame
  55.     list [.f configure -class] [catch {.f configure -class Different} msg] $msg
  56. } {{-class class Class Frame NewFrame} 1 {can't modify -class option after widget is created}}
  57. catch {destroy .f}
  58. test frame-1.2 {frame configuration options} {
  59.     frame .f -colormap new
  60.     list [.f configure -colormap] [catch {.f configure -colormap .} msg] $msg
  61. } {{-colormap colormap Colormap {} new} 1 {can't modify -colormap option after widget is created}}
  62. catch {destroy .f}
  63. test frame-1.3 {frame configuration options} {
  64.     frame .f -visual default
  65.     list [.f configure -visual] [catch {.f configure -visual best} msg] $msg
  66. } {{-visual visual Visual {} default} 1 {can't modify -visual option after widget is created}}
  67. catch {destroy .f}
  68. test frame-1.4 {frame configuration options} {
  69.     list [catch {frame .f -screen bogus} msg] $msg
  70. } {1 {unknown option "-screen"}}
  71. test frame-1.5 {frame configuration options} {
  72.     set result [list [catch {frame .f -container true} msg] $msg 
  73.     [.f configure -container]]
  74.     destroy .f
  75.     set result
  76. } {0 .f {-container container Container 0 1}}
  77. test frame-1.6 {frame configuration options} {
  78.     list [catch {frame .f -container bogus} msg] $msg
  79. } {1 {expected boolean value but got "bogus"}}
  80. test frame-1.7 {frame configuration options} {
  81.     frame .f
  82.     set result [list [catch {.f configure -container 1} msg] $msg]
  83.     destroy .f
  84.     set result
  85. } {1 {can't modify -container option after widget is created}}
  86. test frame-1.8 {frame configuration options} {
  87.     # Make sure all options can be set to the default value
  88.     frame .f
  89.     set opts {}
  90.     foreach opt [.f configure] {
  91.         if {[llength $opt] == 5} {
  92.             lappend opts [lindex $opt 0] [lindex $opt 4]
  93.         }
  94.     }
  95.     eval frame .g $opts
  96.     destroy .f .g
  97. } {}
  98. frame .f
  99. set i 9
  100. foreach test {
  101.     {-background #ff0000 #ff0000 non-existent
  102.     {unknown color name "non-existent"}}
  103.     {-bd 4 4 badValue {bad screen distance "badValue"}}
  104.     {-bg #00ff00 #00ff00 non-existent
  105.     {unknown color name "non-existent"}}
  106.     {-borderwidth 1.3 1 badValue {bad screen distance "badValue"}}
  107.     {-cursor arrow arrow badValue {bad cursor spec "badValue"}}
  108.     {-height 100 100 not_a_number {bad screen distance "not_a_number"}}
  109.     {-highlightbackground #112233 #112233 ugly {unknown color name "ugly"}}
  110.     {-highlightcolor #123456 #123456 non-existent
  111.     {unknown color name "non-existent"}}
  112.     {-highlightthickness 6 6 badValue {bad screen distance "badValue"}}
  113.     {-padx 3 3 badValue {bad screen distance "badValue"}}
  114.     {-pady 4 4 badValue {bad screen distance "badValue"}}
  115.     {-relief ridge ridge badValue {bad relief "badValue": must be flat, groove, raised, ridge, solid, or sunken}}
  116.     {-takefocus "any string" "any string" {} {}}
  117.     {-width 32 32 badValue {bad screen distance "badValue"}}
  118. } {
  119.     set name [lindex $test 0]
  120.     test frame-1.$i {frame configuration options} {
  121. .f configure $name [lindex $test 1]
  122. lindex [.f configure $name] 4
  123.     } [lindex $test 2]
  124.     incr i
  125.     if {[lindex $test 3] != ""} {
  126. test frame-1.$i {frame configuration options} {
  127.     list [catch {.f configure $name [lindex $test 3]} msg] $msg
  128. } [list 1 [lindex $test 4]]
  129.     }
  130.     .f configure $name [lindex [.f configure $name] 3]
  131.     incr i
  132. }
  133. destroy .f
  134. set i 1
  135. test frame-2.1 {toplevel configuration options} {
  136.     catch {destroy .t}
  137.     toplevel .t -width 200 -height 100 -class NewClass
  138.     wm geometry .t +0+0
  139.     list [.t configure -class] [catch {.t configure -class Another} msg] $msg
  140. } {{-class class Class Toplevel NewClass} 1 {can't modify -class option after widget is created}}
  141. test frame-2.2 {toplevel configuration options} {
  142.     catch {destroy .t}
  143.     toplevel .t -width 200 -height 100 -colormap new
  144.     wm geometry .t +0+0
  145.     list [.t configure -colormap] [catch {.t configure -colormap .} msg] $msg
  146. } {{-colormap colormap Colormap {} new} 1 {can't modify -colormap option after widget is created}}
  147. test frame-2.3 {toplevel configuration options} {
  148.     catch {destroy .t}
  149.     toplevel .t -width 200 -height 100 -colormap {} -use {}
  150.     wm geometry .t +0+0
  151.     list [catch {.t configure -container 1} msg] $msg [.t configure -container]
  152. } {1 {can't modify -container option after widget is created} {-container container Container 0 0}}
  153. test frame-2.4 {toplevel configuration options} {
  154.     catch {destroy .t}
  155.     list [catch {toplevel .t -width 200 -height 100 -colormap bogus} msg] $msg
  156. } {1 {bad window path name "bogus"}}
  157. set default "[winfo visual .] [winfo depth .]"
  158. test frame-2.5 {toplevel configuration options} {
  159.     catch {destroy .t}
  160.     toplevel .t -width 200 -height 100
  161.     wm geometry .t +0+0
  162.     list [catch {.t configure -use 0x44022} msg] $msg [.t configure -use]
  163. } {1 {can't modify -use option after widget is created} {-use use Use {} {}}}
  164. test frame-2.6 {toplevel configuration options} {
  165.     catch {destroy .t}
  166.     toplevel .t -width 200 -height 100 -visual default
  167.     wm geometry .t +0+0
  168.     list [.t configure -visual] [catch {.t configure -visual best} msg] $msg
  169. } {{-visual visual Visual {} default} 1 {can't modify -visual option after widget is created}}
  170. test frame-2.7 {toplevel configuration options} {
  171.     catch {destroy .t}
  172.     list [catch {toplevel .t -width 200 -height 100 -visual who_knows?} msg] $msg
  173. } {1 {unknown or ambiguous visual name "who_knows?": class must be best, directcolor, grayscale, greyscale, pseudocolor, staticcolor, staticgray, staticgrey, truecolor, or default}}
  174. if [info exists env(DISPLAY)] {
  175.     test frame-2.8 {toplevel configuration options} {
  176. catch {destroy .t}
  177. toplevel .t -width 200 -height 100 -screen $env(DISPLAY)
  178. wm geometry .t +0+0
  179. list [.t configure -screen] 
  180. [catch {.t configure -screen another} msg] $msg
  181.     } [list [list -screen screen Screen {} $env(DISPLAY)] 1 {can't modify -screen option after widget is created}]
  182. }
  183. test frame-2.9 {toplevel configuration options} {
  184.     catch {destroy .t}
  185.     list [catch {toplevel .t -width 200 -height 100 -screen bogus} msg] $msg
  186. } {1 {couldn't connect to display "bogus"}}
  187. test frame-2.10 {toplevel configuration options} {
  188.     catch {destroy .t}
  189.     catch {destroy .x}
  190.     toplevel .t -container 1 -width 300 -height 120
  191.     wm geometry .t +0+0
  192.     set result [list 
  193.             [catch {toplevel .x -container 1 -use [winfo id .t]} msg] $msg]
  194.     destroy .t .x
  195.     set result
  196. } {1 {A window cannot have both the -use and the -container option set.}}
  197. test frame-2.11 {toplevel configuration options} {
  198.     # Make sure all options can be set to the default value
  199.     toplevel .f
  200.     set opts {}
  201.     foreach opt [.f configure] {
  202.         if {[llength $opt] == 5} {
  203.             lappend opts [lindex $opt 0] [lindex $opt 4]
  204.         }
  205.     }
  206.     eval toplevel .g $opts
  207.     destroy .f .g
  208. } {}
  209. catch {destroy .t}
  210. toplevel .t -width 300 -height 150
  211. wm geometry .t +0+0
  212. update
  213. set i 12
  214. foreach test {
  215.     {-background #ff0000 #ff0000 non-existent
  216.     {unknown color name "non-existent"}}
  217.     {-bd 4 4 badValue {bad screen distance "badValue"}}
  218.     {-bg #00ff00 #00ff00 non-existent
  219.     {unknown color name "non-existent"}}
  220.     {-borderwidth 1.3 1 badValue {bad screen distance "badValue"}}
  221.     {-cursor arrow arrow badValue {bad cursor spec "badValue"}}
  222.     {-height 100 100 not_a_number {bad screen distance "not_a_number"}}
  223.     {-highlightcolor #123456 #123456 non-existent
  224.     {unknown color name "non-existent"}}
  225.     {-highlightthickness 3 3 badValue {bad screen distance "badValue"}}
  226.     {-padx 3 3 badValue {bad screen distance "badValue"}}
  227.     {-pady 4 4 badValue {bad screen distance "badValue"}}
  228.     {-relief ridge ridge badValue {bad relief "badValue": must be flat, groove, raised, ridge, solid, or sunken}}
  229.     {-width 32 32 badValue {bad screen distance "badValue"}}
  230. } {
  231.     set name [lindex $test 0]
  232.     test frame-2.$i {toplevel configuration options} {
  233. .t configure $name [lindex $test 1]
  234. lindex [.t configure $name] 4
  235.     } [lindex $test 2]
  236.     incr i
  237.     if {[lindex $test 3] != ""} {
  238. test frame-2.$i {toplevel configuration options} {
  239.     list [catch {.t configure $name [lindex $test 3]} msg] $msg
  240. } [list 1 [lindex $test 4]]
  241.     }
  242.     .t configure $name [lindex [.t configure $name] 3]
  243.     incr i
  244. }
  245. test frame-3.1 {TkCreateFrame procedure} {
  246.     list [catch frame msg] $msg
  247. } {1 {wrong # args: should be "frame pathName ?options?"}}
  248. test frame-3.2 {TkCreateFrame procedure} {
  249.     catch {destroy .f}
  250.     frame .f
  251.     set result [.f configure -class]
  252.     destroy .f
  253.     set result
  254. } {-class class Class Frame Frame}
  255. test frame-3.3 {TkCreateFrame procedure} {
  256.     catch {destroy .t}
  257.     toplevel .t
  258.     wm geometry .t +0+0
  259.     set result [.t configure -class]
  260.     destroy .t
  261.     set result
  262. } {-class class Class Toplevel Toplevel}
  263. test frame-3.4 {TkCreateFrame procedure} {
  264.     catch {destroy .t}
  265.     toplevel .t -width 350 -class NewClass -bg black -visual default -height 90
  266.     wm geometry .t +0+0
  267.     update
  268.     list [lindex [.t configure -width] 4] 
  269.     [lindex [.t configure -background] 4] 
  270.     [lindex [.t configure -height] 4]
  271. } {350 black 90}
  272. # Be sure that the -class, -colormap, and -visual options are processed
  273. # before configuring the widget.
  274. test frame-3.5 {TkCreateFrame procedure} {
  275.     catch {destroy .f}
  276.     option add *NewFrame.background #123456
  277.     frame .f -class NewFrame
  278.     option clear
  279.     lindex [.f configure -background] 4
  280. } {#123456}
  281. test frame-3.6 {TkCreateFrame procedure} {
  282.     catch {destroy .f}
  283.     option add *NewFrame.background #123456
  284.     frame .f -class NewFrame
  285.     option clear
  286.     lindex [.f configure -background] 4
  287. } {#123456}
  288. test frame-3.7 {TkCreateFrame procedure} {
  289.     catch {destroy .f}
  290.     option add *NewFrame.background #332211
  291.     option add *f.class NewFrame
  292.     frame .f
  293.     option clear
  294.     list [lindex [.f configure -class] 4] [lindex [.f configure -background] 4]
  295. } {NewFrame #332211}
  296. test frame-3.8 {TkCreateFrame procedure} {
  297.     catch {destroy .f}
  298.     option add *Silly.background #122334
  299.     option add *f.Class Silly
  300.     frame .f
  301.     option clear
  302.     list [lindex [.f configure -class] 4] [lindex [.f configure -background] 4]
  303. } {Silly #122334}
  304. test frame-3.9 {TkCreateFrame procedure, -use option} unixOnly {
  305.     catch {destroy .t}
  306.     catch {destroy .x}
  307.     toplevel .t -container 1 -width 300 -height 120
  308.     wm geometry .t +0+0
  309.     toplevel .x -width 140 -height 300 -use [winfo id .t] -bg green
  310.     tkwait visibility .x
  311.     set result "[expr [winfo rootx .x] - [winfo rootx .t]] [expr [winfo rooty .x] - [winfo rooty .t]] [winfo width .t] [winfo height .t]"
  312.     destroy .t
  313.     set result
  314. } {0 0 140 300}
  315. test frame-3.10 {TkCreateFrame procedure, -use option} unixOnly {
  316.     catch {destroy .t}
  317.     catch {destroy .x}
  318.     toplevel .t -container 1 -width 300 -height 120
  319.     wm geometry .t +0+0
  320.     option add *x.use [winfo id .t]
  321.     toplevel .x -width 140 -height 300 -bg green
  322.     tkwait visibility .x
  323.     set result "[expr [winfo rootx .x] - [winfo rootx .t]] [expr [winfo rooty .x] - [winfo rooty .t]] [winfo width .t] [winfo height .t]"
  324.      destroy .t
  325.     option clear
  326.     set result
  327. } {0 0 140 300}
  328. # The tests below require specific display characteristics.  Even so,
  329. # they are non-portable:  some machines don't seem to ever run out of
  330. # colors.
  331. if {([winfo visual .] == "pseudocolor") && ([winfo depth .] == 8)} {
  332.     eatColors .t1
  333.     test frame-3.11 {TkCreateFrame procedure} {nonPortable} {
  334. catch {destroy .t}
  335. toplevel .t -width 300 -height 200 -bg #475601
  336. wm geometry .t +0+0
  337. update
  338. colorsFree .t
  339.     } {0}
  340.     test frame-3.12 {TkCreateFrame procedure} {nonPortable} {
  341. catch {destroy .t}
  342. toplevel .t -width 300 -height 200 -bg #475601 -colormap new
  343. wm geometry .t +0+0
  344. update
  345. colorsFree .t
  346.     } {1}
  347.     test frame-3.13 {TkCreateFrame procedure} {nonPortable} {
  348. catch {destroy .t}
  349. option add *t.class Toplevel2
  350. option add *Toplevel2.colormap new
  351. toplevel .t -width 300 -height 200 -bg #475601
  352. wm geometry .t +0+0
  353. update
  354. option clear
  355. colorsFree .t
  356.     } {1}
  357.     test frame-3.14 {TkCreateFrame procedure} {nonPortable} {
  358. catch {destroy .t}
  359. option add *t.class Toplevel3
  360. option add *Toplevel3.Colormap new
  361. toplevel .t -width 300 -height 200 -bg #475601 -colormap new
  362. wm geometry .t +0+0
  363. update
  364. option clear
  365. colorsFree .t
  366.     } {1}
  367.     test frame-3.15 {TkCreateFrame procedure, -use and -colormap} {unixOnly nonPortable} {
  368. catch {destroy .t}
  369. catch {destroy .x}
  370. toplevel .t -container 1 -width 300 -height 120
  371. wm geometry .t +0+0
  372. toplevel .x -width 140 -height 300 -use [winfo id .t] -bg green -colormap new
  373. tkwait visibility .x
  374. set result "[colorsFree .t] [colorsFree .x]"
  375. destroy .t
  376. set result
  377.     } {0 1}
  378.     test frame-3.16 {TkCreateFrame procedure} {nonPortable} {
  379. catch {destroy .t}
  380. toplevel .t -width 300 -height 200 -bg #475601 -visual default
  381. wm geometry .t +0+0
  382. update
  383. colorsFree .t
  384.     } {0}
  385.     test frame-3.17 {TkCreateFrame procedure} {nonPortable} {
  386. catch {destroy .t}
  387. toplevel .t -width 300 -height 200 -bg #475601 -visual default 
  388. -colormap new
  389. wm geometry .t +0+0
  390. update
  391. colorsFree .t
  392.     } {1}
  393.     if {[lsearch -exact [winfo visualsavailable .] {grayscale 8}] >= 0} {
  394.         test frame-3.18 {TkCreateFrame procedure} {nonPortable} {
  395.     catch {destroy .t}
  396.     toplevel .t -visual {grayscale 8} -width 300 -height 200 
  397.     -bg #434343 
  398.     wm geometry .t +0+0
  399.     update
  400.     colorsFree .t 131 131 131
  401. } {1}
  402.         test frame-3.19 {TkCreateFrame procedure} {nonPortable} {
  403.     catch {destroy .t}
  404.     option add *t.class T4
  405.     option add *T4.visual {grayscale 8}
  406.     toplevel .t -width 300 -height 200 -bg #434343
  407.     wm geometry .t +0+0
  408.     update
  409.     option clear
  410.     list [colorsFree .t 131 131 131] [lindex [.t configure -visual] 4]
  411. } {1 {grayscale 8}}
  412.         test frame-3.20 {TkCreateFrame procedure} {nonPortable} {
  413.     catch {destroy .t}
  414.     set x ok
  415.     option add *t.class T5
  416.     option add *T5.Visual {grayscale 8}
  417.     toplevel .t -width 300 -height 200 -bg #434343
  418.     wm geometry .t +0+0
  419.     update
  420.     option clear
  421.     list [colorsFree .t 131 131 131] [lindex [.t configure -visual] 4]
  422. } {1 {grayscale 8}}
  423.         test frame-3.21 {TkCreateFrame procedure} {nonPortable} {
  424.     catch {destroy .t}
  425.     set x ok
  426.     toplevel .t -visual {grayscale 8} -width 300 -height 200 
  427.     -bg #434343 
  428.     wm geometry .t +0+0
  429.     update
  430.     colorsFree .t 131 131 131
  431. } {1}
  432.     }
  433.     destroy .t1
  434. }
  435. test frame-3.22 {TkCreateFrame procedure, default dimensions} {
  436.     catch {destroy .t}
  437.     toplevel .t
  438.     wm geometry .t +0+0
  439.     update
  440.     set result "[winfo reqwidth .t] [winfo reqheight .t]"
  441.     frame .t.f -bg red
  442.     pack .t.f
  443.     update
  444.     lappend result [winfo reqwidth .t.f] [winfo reqheight .t.f]
  445.     destroy .t
  446.     set result
  447. } {200 200 1 1}
  448. test frame-3.23 {TkCreateFrame procedure} {
  449.     catch {destroy .f}
  450.     list [catch {frame .f -gorp glob} msg] $msg
  451. } {1 {unknown option "-gorp"}}
  452. test frame-3.24 {TkCreateFrame procedure} {
  453.     catch {destroy .t}
  454.     list [catch {
  455. toplevel .t -width 300 -height 200 -colormap new -bogus option
  456. wm geometry .t +0+0
  457.     } msg] $msg
  458. } {1 {unknown option "-bogus"}}
  459. test frame-4.1 {TkCreateFrame procedure} {
  460.     catch {destroy .f}
  461.     catch {frame .f -gorp glob}
  462.     winfo exists .f
  463. } 0
  464. test frame-4.2 {TkCreateFrame procedure} {
  465.     catch {destroy .f}
  466.     list [frame .f -width 200 -height 100] [winfo exists .f]
  467. } {.f 1}
  468. catch {destroy .f}
  469. frame .f -highlightcolor black
  470. test frame-5.1 {FrameWidgetCommand procedure} {
  471.     list [catch .f msg] $msg
  472. } {1 {wrong # args: should be ".f option ?arg arg ...?"}}
  473. test frame-5.2 {FrameWidgetCommand procedure, cget option} {
  474.     list [catch {.f cget} msg] $msg
  475. } {1 {wrong # args: should be ".f cget option"}}
  476. test frame-5.3 {FrameWidgetCommand procedure, cget option} {
  477.     list [catch {.f cget a b} msg] $msg
  478. } {1 {wrong # args: should be ".f cget option"}}
  479. test frame-5.4 {FrameWidgetCommand procedure, cget option} {
  480.     list [catch {.f cget -gorp} msg] $msg
  481. } {1 {unknown option "-gorp"}}
  482. test frame-5.5 {FrameWidgetCommand procedure, cget option} {
  483.     .f cget -highlightcolor
  484. } {black}
  485. test frame-5.6 {FrameWidgetCommand procedure, cget option} {
  486.     list [catch {.f cget -screen} msg] $msg
  487. } {1 {unknown option "-screen"}}
  488. test frame-5.7 {FrameWidgetCommand procedure, cget option} {
  489.     catch {destroy .t}
  490.     toplevel .t
  491.     catch {.t cget -screen}
  492. } {0}
  493. catch {destroy .t}
  494. test frame-5.8 {FrameWidgetCommand procedure, configure option} {
  495.     llength [.f configure]
  496. } {18}
  497. test frame-5.9 {FrameWidgetCommand procedure, configure option} {
  498.     list [catch {.f configure -gorp} msg] $msg
  499. } {1 {unknown option "-gorp"}}
  500. test frame-5.10 {FrameWidgetCommand procedure, configure option} {
  501.     list [catch {.f configure -gorp bogus} msg] $msg
  502. } {1 {unknown option "-gorp"}}
  503. test frame-5.11 {FrameWidgetCommand procedure, configure option} {
  504.     list [catch {.f configure -width 200 -height} msg] $msg
  505. } {1 {value for "-height" missing}}
  506. test frame-5.12 {FrameWidgetCommand procedure} {
  507.     list [catch {.f swizzle} msg] $msg
  508. } {1 {bad option "swizzle": must be cget or configure}}
  509. test frame-5.13 {FrameWidgetCommand procedure, configure option} {
  510.     llength [. configure]
  511. } {21}
  512. test frame-6.1 {ConfigureFrame procedure} {
  513.     catch {destroy .f}
  514.     frame .f -width 150
  515.     list [winfo reqwidth .f] [winfo reqheight .f]
  516. } {150 1}
  517. test frame-6.2 {ConfigureFrame procedure} {
  518.     catch {destroy .f}
  519.     frame .f -height 97
  520.     list [winfo reqwidth .f] [winfo reqheight .f]
  521. } {1 97}
  522. test frame-6.3 {ConfigureFrame procedure} {
  523.     catch {destroy .f}
  524.     frame .f
  525.     set result {}
  526.     lappend result [winfo reqwidth .f] [winfo reqheight .f]
  527.     .f configure -width 100 -height 180
  528.     lappend result [winfo reqwidth .f] [winfo reqheight .f]
  529.     .f configure -width 0 -height 0
  530.     lappend result [winfo reqwidth .f] [winfo reqheight .f]
  531. } {1 1 100 180 100 180}
  532. test frame-7.1 {FrameEventProc procedure} {
  533.     frame .frame2
  534.     set result [info commands .frame2]
  535.     destroy .frame2
  536.     lappend result [info commands .frame2]
  537. } {.frame2 {}}
  538. test frame-7.2 {FrameEventProc procedure} {
  539.     deleteWindows
  540.     frame .f1 -bg #543210
  541.     rename .f1 .f2
  542.     set x {}
  543.     lappend x [winfo children .]
  544.     lappend x [.f2 cget -bg]
  545.     destroy .f1
  546.     lappend x [info command .f*] [winfo children .]
  547. } {.f1 #543210 {} {}}
  548. test frame-8.1 {FrameCmdDeletedProc procedure} {
  549.     deleteWindows
  550.     frame .f1
  551.     rename .f1 {}
  552.     list [info command .f*] [winfo children .]
  553. } {{} {}}
  554. test frame-8.2 {FrameCmdDeletedProc procedure} {
  555.     deleteWindows
  556.     toplevel .f1 -menu .m
  557.     wm geometry .f1 +0+0
  558.     update
  559.     rename .f1 {}
  560.     update
  561.     list [info command .f*] [winfo children .]
  562. } {{} {}}
  563. #
  564. # This one fails with the dash-patch!!!! Still don't know why  :-(
  565. #
  566. #test frame-8.3 {FrameCmdDeletedProc procedure} {
  567. #    eval destroy [winfo children .]
  568. #    toplevel .f1 -menu .m
  569. #    wm geometry .f1 +0+0
  570. #    menu .m
  571. #    update
  572. #    rename .f1 {}
  573. #    update
  574. #    set result [list [info command .f*] [winfo children .]]
  575. #    eval destroy [winfo children .]
  576. #    set result
  577. #} {{} .m}
  578. test frame-9.1 {MapFrame procedure} {
  579.     catch {destroy .t}
  580.     toplevel .t -width 100 -height 400
  581.     wm geometry .t +0+0
  582.     set result [winfo ismapped .t]
  583.     update idletasks
  584.     lappend result [winfo ismapped .t]
  585. } {0 1}
  586. test frame-9.2 {MapFrame procedure} {
  587.     catch {destroy .t}
  588.     toplevel .t -width 100 -height 400
  589.     wm geometry .t +0+0
  590.     destroy .t
  591.     update
  592.     winfo exists .t
  593. } {0}
  594. test frame-9.3 {MapFrame procedure, window deleted while mapping} {
  595.     toplevel .t2 -width 200 -height 200
  596.     wm geometry .t2 +0+0
  597.     tkwait visibility .t2
  598.     catch {destroy .t}
  599.     toplevel .t -width 100 -height 400
  600.     wm geometry .t +0+0
  601.     frame .t2.f -width 50 -height 50
  602.     bind .t2.f <Configure> {destroy .t}
  603.     pack .t2.f -side top
  604.     update idletasks
  605.     winfo exists .t
  606. } {0}
  607. set l [interp hidden]
  608. deleteWindows
  609. test frame-10.1 {frame widget vs hidden commands} {
  610.     catch {destroy .t}
  611.     frame .t
  612.     interp hide {} .t
  613.     destroy .t
  614.     list [winfo children .] [interp hidden]
  615. } [list {} $l]
  616. test frame-11.1 {TkInstallFrameMenu} {
  617.     catch {destroy .t}
  618.     menu .m1
  619.     .m1 add cascade -menu .m1.system
  620.     menu .m1.system -tearoff 0
  621.     .m1.system add command -label foo
  622.     list [toplevel .t -menu .m1] [destroy .m1] [destroy .t]
  623. } {.t {} {}}
  624. test frame-11.2 {TkInstallFrameMenu - frame renamed} {
  625.     catch {destroy .t}
  626.     catch {rename foo {}}
  627.     menu .m1
  628.     .m1 add cascade -menu .m1.system
  629.     menu .m1.system -tearoff 0
  630.     .m1.system add command -label foo
  631.     toplevel .t
  632.     list [rename .t foo] [destroy .t] [destroy foo] [destroy .m1]
  633. } {{} {} {} {}}
  634. test frame-12.1 {FrameWorldChanged procedure} {
  635.     # Test -bd -padx and -pady
  636.     destroy .f
  637.     frame .f -borderwidth 2 -padx 3 -pady 4
  638.     place .f -x 0 -y 0 -width 40 -height 40
  639.     pack [frame .f.f] -fill both -expand 1
  640.     update
  641.     set result [list [winfo x .f.f] [winfo y .f.f] 
  642.             [winfo width .f.f] [winfo height .f.f]]
  643.     destroy .f
  644.     set result
  645. } {5 6 30 28}
  646. test frame-12.2 {FrameWorldChanged procedure} {
  647.     # Test all -labelanchor positions
  648.     destroy .f
  649.     set font {helvetica 12}
  650.     labelframe .f -highlightthickness 1 -bd 3 -padx 1 -pady 2 -font $font 
  651.             -text "Mupp"
  652.     set fh [expr {[font metrics $font -linespace] + 2 - 3}]
  653.     set fw [expr {[font measure $font "Mupp"] + 2 - 3}]
  654.     if {$fw < 0} {set fw 0}
  655.     if {$fh < 0} {set fh 0}
  656.     place .f -x 0 -y 0 -width 100 -height 100
  657.     pack [frame .f.f] -fill both -expand 1
  658.     set result {} 
  659.     foreach lp {nw n ne en e es se s sw ws w wn} {
  660.         .f configure -labelanchor $lp
  661.         update
  662.         set expx 5
  663.         set expy 6
  664.         set expw 90
  665.         set exph 88
  666.         switch -glob $lp {
  667.             n* {incr expy $fh ; incr exph -$fh}
  668.             s* {incr exph -$fh}
  669.             w* {incr expx $fw ; incr expw -$fw}
  670.             e* {incr expw -$fw}
  671.         }
  672.         lappend result [expr {
  673.                 [winfo x .f.f] == $expx && [winfo y .f.f] == $expy &&
  674.                 [winfo width .f.f] == $expw && [winfo height .f.f] == $exph}]
  675.     }
  676.     destroy .f
  677.     set result
  678. } {1 1 1 1 1 1 1 1 1 1 1 1}
  679. test frame-12.3 {FrameWorldChanged procedure} {
  680.     # Check reaction on font change
  681.     destroy .f
  682.     font create myfont -family courier -size 10
  683.     labelframe .f -font myfont -text Mupp
  684.     place .f -x 0 -y 0 -width 40 -height 40
  685.     pack [frame .f.f] -fill both -expand 1
  686.     update
  687.     set h1 [font metrics myfont -linespace]
  688.     set y1 [winfo y .f.f]
  689.     font configure myfont -size 20
  690.     update
  691.     set h2 [font metrics myfont -linespace]
  692.     set y2 [winfo y .f.f]
  693.     destroy .f
  694.     font delete myfont
  695.     expr {($h2 - $h1) - ($y2 - $y1)}
  696. } {0}
  697. test frame-13.1 {labelframe configuration options} {
  698.     labelframe .f -class NewFrame
  699.     list [.f configure -class] [catch {.f configure -class Different} msg] $msg
  700. } {{-class class Class Labelframe NewFrame} 1 {can't modify -class option after widget is created}}
  701. catch {destroy .f}
  702. test frame-13.2 {labelframe configuration options} {
  703.     list [catch {labelframe .f -colormap new} msg] $msg
  704. } {0 .f}
  705. catch {destroy .f}
  706. test frame-13.3 {labelframe configuration options} {
  707.     list [catch {labelframe .f -visual default} msg] $msg
  708. } {0 .f}
  709. catch {destroy .f}
  710. test frame-13.4 {labelframe configuration options} {
  711.     list [catch {labelframe .f -screen bogus} msg] $msg
  712. } {1 {unknown option "-screen"}}
  713. test frame-13.5 {labelframe configuration options} {
  714.     set result [list [catch {labelframe .f -container true} msg] $msg 
  715.     [.f configure -container]]
  716.     destroy .f
  717.     set result
  718. } {0 .f {-container container Container 0 1}}
  719. test frame-13.6 {labelframe configuration options} {
  720.     list [catch {labelframe .f -container bogus} msg] $msg
  721. } {1 {expected boolean value but got "bogus"}}
  722. test frame-13.7 {labelframe configuration options} {
  723.     labelframe .f
  724.     set result [list [catch {.f configure -container 1} msg] $msg]
  725.     destroy .f
  726.     set result
  727. } {1 {can't modify -container option after widget is created}}
  728. labelframe .f
  729. set i 8
  730. foreach test {
  731.     {-background #ff0000 #ff0000 non-existent
  732.     {unknown color name "non-existent"}}
  733.     {-bd 4 4 badValue {bad screen distance "badValue"}}
  734.     {-bg #00ff00 #00ff00 non-existent
  735.     {unknown color name "non-existent"}}
  736.     {-borderwidth 1.3 1 badValue {bad screen distance "badValue"}}
  737.     {-cursor arrow arrow badValue {bad cursor spec "badValue"}}
  738.     {-fg #0000ff #0000ff non-existent
  739.     {unknown color name "non-existent"}}
  740.     {-font {courier 8} {courier 8} {} {}}
  741.     {-foreground #ff0000 #ff0000 non-existent
  742.     {unknown color name "non-existent"}}
  743.     {-height 100 100 not_a_number {bad screen distance "not_a_number"}}
  744.     {-highlightbackground #112233 #112233 ugly {unknown color name "ugly"}}
  745.     {-highlightcolor #123456 #123456 non-existent
  746.     {unknown color name "non-existent"}}
  747.     {-highlightthickness 6 6 badValue {bad screen distance "badValue"}}
  748.     {-labelanchor se se badValue {bad labelanchor "badValue": must be e, en, es, n, ne, nw, s, se, sw, w, wn, or ws}}
  749.     {-padx 3 3 badValue {bad screen distance "badValue"}}
  750.     {-pady 4 4 badValue {bad screen distance "badValue"}}
  751.     {-relief ridge ridge badValue {bad relief "badValue": must be flat, groove, raised, ridge, solid, or sunken}}
  752.     {-takefocus "any string" "any string" {} {}}
  753.     {-text "any string" "any string" {} {}}
  754.     {-width 32 32 badValue {bad screen distance "badValue"}}
  755. } {
  756.     set name [lindex $test 0]
  757.     test frame-13.$i {labelframe configuration options} {
  758. .f configure $name [lindex $test 1]
  759. lindex [.f configure $name] 4
  760.     } [lindex $test 2]
  761.     incr i
  762.     if {[lindex $test 3] != ""} {
  763. test frame-13.$i {labelframe configuration options} {
  764.     list [catch {.f configure $name [lindex $test 3]} msg] $msg
  765. } [list 1 [lindex $test 4]]
  766.     }
  767.     .f configure $name [lindex [.f configure $name] 3]
  768.     incr i
  769. }
  770. destroy .f
  771. test frame-14.1 {labelframe labelwidget option} {
  772.     # Test that label is moved in stacking order
  773.     destroy .f .l
  774.     label .l -text Mupp
  775.     labelframe .f -labelwidget .l
  776.     pack .f
  777.     frame .f.f -width 50 -height 50
  778.     pack .f.f
  779.     update
  780.     set res [list [winfo children .] [winfo width .f] 
  781.             [expr {[winfo height .f] - [winfo height .l]}]]
  782.     destroy .f .l
  783.     set res
  784. } {{.f .l} 54 52}
  785. test frame-14.2 {labelframe labelwidget option} {
  786.     # Test the labelframe's reaction if the label is destroyed
  787.     destroy .f .l
  788.     label .l -text Aratherlonglabel
  789.     labelframe .f -labelwidget .l
  790.     pack .f
  791.     label .f.l -text Mupp
  792.     pack .f.l
  793.     update
  794.     set res [list [.f cget -labelwidget]]
  795.     lappend res [expr {[winfo width .f] - [winfo width .l]}]
  796.     destroy .l
  797.     lappend res [.f cget -labelwidget]
  798.     update
  799.     lappend res [expr {[winfo width .f] - [winfo width .f.l]}]
  800.     destroy .f
  801.     set res
  802. } {.l 12 {} 4}
  803. test frame-14.3 {labelframe labelwidget option} {
  804.     # Test the labelframe's reaction if the label is stolen
  805.     destroy .f .l
  806.     label .l -text Aratherlonglabel
  807.     labelframe .f -labelwidget .l
  808.     pack .f
  809.     label .f.l -text Mupp
  810.     pack .f.l
  811.     update
  812.     set res [list [.f cget -labelwidget]]
  813.     lappend res [expr {[winfo width .f] - [winfo width .l]}]
  814.     pack .l
  815.     lappend res [.f cget -labelwidget]
  816.     update
  817.     lappend res [expr {[winfo width .f] - [winfo width .f.l]}]
  818.     destroy .f .l
  819.     set res
  820. } {.l 12 {} 4}
  821. test frame-14.4 {labelframe labelwidget option} {
  822.     # Test the label's reaction if the labelframe is destroyed
  823.     destroy .f .l
  824.     label .l -text Mupp
  825.     labelframe .f -labelwidget .l
  826.     pack .f
  827.     update
  828.     set res [list [winfo manager .l]]
  829.     destroy .f
  830.     lappend res [winfo manager .l]
  831.     destroy .l
  832.     set res
  833. } {labelframe {}}
  834. test frame-14.5 {labelframe labelwidget option} {
  835.     # Test that the labelframe reacts on changes in label
  836.     destroy .f .l
  837.     label .l -text Aratherlonglabel
  838.     labelframe .f -labelwidget .l
  839.     pack .f
  840.     label .f.l -text Mupp
  841.     pack .f.l
  842.     update
  843.     set first [winfo width .f]
  844.     set res [expr {[winfo width .f] - [winfo width .l]}]
  845.     .l configure -text Shorter
  846.     update
  847.     lappend res [expr {[winfo width .f] - [winfo width .l]}]
  848.     lappend res [expr {[winfo width .f] < $first}]
  849.     .l configure -text Alotlongerthananytimebefore
  850.     update
  851.     lappend res [expr {[winfo width .f] - [winfo width .l]}]
  852.     lappend res [expr {[winfo width .f] > $first}]
  853.     destroy .f .l
  854.     set res
  855. } {12 12 1 12 1}
  856. test frame-14.6 {labelframe labelwidget option} {
  857.     # Destroying a labelframe with a child label caused a crash
  858.     # when not handling mapping of the label correctly.
  859.     # This test does not test anything directly, it's just ment
  860.     # to catch if the same mistake is made again.
  861.     destroy .f
  862.     labelframe .f
  863.     pack .f
  864.     label .f.l -text Mupp
  865.     .f configure -labelwidget .f.l
  866.     update
  867.     destroy .f
  868. } {}
  869. catch {destroy .f}
  870. rename eatColors {}
  871. rename colorsFree {}
  872. # cleanup
  873. ::tcltest::cleanupTests
  874. return