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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test labels, buttons, checkbuttons, and
  2. # radiobuttons in Tk (i.e., all the widgets defined in tkButton.c).  It is
  3. # organized in the standard fashion for Tcl 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: button.test,v 1.13 2002/09/02 23:32:35 hobbs 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. proc bogusTrace args {
  18.     error "trace aborted"
  19. }
  20. catch {unset value}
  21. catch {unset value2}
  22. # Create entries in the option database to be sure that geometry options
  23. # like border width have predictable values.
  24. option add *Button.borderWidth 2
  25. option add *Button.highlightThickness 2
  26. option add *Button.font {Helvetica -12 bold}
  27. eval image delete [image names]
  28. if {[testConstraint testImageType]} {
  29.     image create test image1
  30. }
  31. label .l -text Label
  32. button .b -text Button
  33. checkbutton .c -text Checkbutton
  34. radiobutton .r -text Radiobutton
  35. pack .l .b .c .r
  36. update
  37. set i 1
  38. foreach test {
  39.     {-activebackground #012345 #012345 non-existent
  40.     {unknown color name "non-existent"} {1 1 1 1}}
  41.     {-activeforeground #ff0000 #ff0000 non-existent
  42.     {unknown color name "non-existent"} {1 1 1 1}}
  43.     {-anchor nw nw bogus {bad anchor "bogus": must be n, ne, e, se, s, sw, w, nw, or center} {1 1 1 1}}
  44.     {-background #ff0000 #ff0000 non-existent
  45.     {unknown color name "non-existent"} {1 1 1 1}}
  46.     {-bd 4 4 badValue {bad screen distance "badValue"} {1 1 1 1}}
  47.     {-bg #ff0000 #ff0000 non-existent {unknown color name "non-existent"}
  48.     {1 1 1 1}}
  49.     {-bitmap questhead questhead badValue {bitmap "badValue" not defined}
  50.     {1 1 1 1}}
  51.     {-borderwidth 1.3 1.3 badValue {bad screen distance "badValue"} {1 1 1 1}}
  52.     {-command "set x" {set x} {} {} {0 1 1 1}}
  53.     {-compound left left bogus {bad compound "bogus": must be bottom, center, left, none, right, or top} {1 1 1 1}}
  54.     {-cursor arrow arrow badValue {bad cursor spec "badValue"} {1 1 1 1}}
  55.     {-default active active huh?
  56.     {bad default "huh?": must be active, disabled, or normal}
  57.     {0 1 0 0}}
  58.     {-disabledforeground #00ff00 #00ff00 xyzzy {unknown color name "xyzzy"}
  59.     {1 1 1 1}}
  60.     {-fg #110022 #110022 bogus {unknown color name "bogus"} {1 1 1 1}}
  61.     {-font {Helvetica 12} {Helvetica 12} {} {font "" doesn't exist} {1 1 1 1}}
  62.     {-foreground #110022 #110022 bogus {unknown color name "bogus"} {1 1 1 1}}
  63.     {-height 18 18 20.0 {expected integer but got "20.0"} {1 1 1 1}}
  64.     {-highlightbackground #112233 #112233 ugly {unknown color name "ugly"}
  65.     {1 1 1 1}}
  66.     {-highlightcolor #110022 #110022 bogus {unknown color name "bogus"}
  67.     {1 1 1 1}}
  68.     {-highlightthickness 6m 6m badValue {bad screen distance "badValue"}
  69.     {1 1 1 1}}
  70.     {-image image1 image1 bogus {image "bogus" doesn't exist} {1 1 1 1}}
  71.     {-indicatoron yes 1 no_way {expected boolean value but got "no_way"}
  72.     {0 0 1 1}}
  73.     {-justify right right bogus {bad justification "bogus": must be left, right, or center} {1 1 1 1}}
  74.     {-offrelief flat flat 1.5 {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken} {0 0 1 1}}
  75.     {-offvalue lousy lousy {} {} {0 0 1 0}}
  76.     {-offvalue fantastic fantastic {} {} {0 0 1 0}}
  77.     {-overrelief "" "" 1.5 {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken} {0 1 1 1}}
  78.     {-padx 12m 12m 420x {bad screen distance "420x"} {1 1 1 1}}
  79.     {-pady 12m 12m 420x {bad screen distance "420x"} {1 1 1 1}}
  80.     {-repeatdelay 100 100 foo {expected integer but got "foo"} {0 1 0 0}}
  81.     {-repeatinterval 100 100 foo {expected integer but got "foo"} {0 1 0 0}}
  82.     {-relief flat flat 1.5 {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken} {1 1 1 1}}
  83.     {-selectcolor #110022 #110022 bogus {unknown color name "bogus"} {0 0 1 1}}
  84.     {-selectimage image1 image1 bogus {image "bogus" doesn't exist} {0 0 1 1}}
  85.     {-state normal normal bogus {bad state "bogus": must be active, disabled, or normal} {1 1 1 1}}
  86.     {-takefocus "any string" "any string" {} {} {1 1 1 1}}
  87.     {-text "Sample text" {Sample text} {} {} {1 1 1 1}}
  88.     {-textvariable i i {} {} {1 1 1 1}}
  89.     {-underline 5 5 3p {expected integer but got "3p"} {1 1 1 1}}
  90.     {-value anyString anyString {} {} {0 0 0 1}}
  91.     {-width 402 402 3p {expected integer but got "3p"} {1 1 1 1}}
  92.     {-wraplength 100 100 6x {bad screen distance "6x"} {1 1 1 1}}
  93. } {
  94.     set name [lindex $test 0]
  95.     set classes [lindex $test 5]
  96.     foreach w {.l .b .c .r} hasOption [lindex $test 5] {
  97. if $hasOption {
  98.     test button-1.$i {configuration options} testImageType {
  99. $w configure $name [lindex $test 1]
  100. lindex [$w configure $name] 4
  101.     } [lindex $test 2]
  102.     incr i
  103.     if {[lindex $test 3] != ""} {
  104. test button-1.$i {configuration options} testImageType {
  105.     list [catch {$w configure $name [lindex $test 3]} msg] $msg
  106. } [list 1 [lindex $test 4]]
  107.     }
  108.     $w configure $name [lindex [$w configure $name] 3]
  109. } else {
  110.     test button-1.$i {configuration options} testImageType {
  111. list [catch {$w configure $name [lindex $test 1]} msg] $msg
  112.     } "1 {unknown option "$name"}"
  113. }
  114.     }
  115.     incr i
  116. }
  117. test button-1.$i {configuration options} {
  118.     .c configure -selectcolor {}
  119. } {}
  120. test button-3.1 {ButtonCreate - not enough cd ../unix
  121. } {
  122.     list [catch {button} msg] $msg
  123. } {1 {wrong # args: should be "button pathName ?options?"}}
  124. test button-3.2 {ButtonCreate procedure - setting label class} {
  125.     catch {destroy .x}
  126.     label .x
  127.     winfo class .x
  128. } {Label}
  129. test button-3.3 {ButtonCreate - setting button class} {
  130.     catch {destroy .x}
  131.     button .x
  132.     winfo class .x
  133. } {Button}
  134. test button-3.4 {ButtonCreate - setting checkbutton class} {
  135.     catch {destroy .x}
  136.     checkbutton .x
  137.     winfo class .x
  138. } {Checkbutton}
  139. test button-3.5 {ButtonCreate - setting radiobutton class} {
  140.     catch {destroy .x}
  141.     radiobutton .x
  142.     winfo class .x
  143. } {Radiobutton}
  144. rename button gorp
  145. test button-3.6 {ButtonCreate - setting class} {
  146.     catch {destroy .x}
  147.     gorp .x
  148.     winfo class .x
  149. } {Button}
  150. rename gorp button
  151. test button-3.7 {ButtonCreate - bad window name} {
  152.     list [catch {button foo} msg] $msg
  153. } {1 {bad window path name "foo"}}
  154. test button-3.8 {ButtonCreate procedure - error in default option value} {
  155.     catch {destroy .funny}
  156.     option add *funny.background bogus
  157.     list [catch {button .funny} msg] $msg $errorInfo
  158. } {1 {unknown color name "bogus"} {unknown color name "bogus"
  159.     (database entry for "-background" in widget ".funny")
  160.     invoked from within
  161. "button .funny"}}
  162. test button-3.9 {ButtonCreate procedure - option error} {
  163.     catch {destroy .x}
  164.     list [catch {button .x -gorp foo} msg] $msg [winfo exists .x]
  165. } {1 {unknown option "-gorp"} 0}
  166. test button-3.10 {ButtonCreate procedure - return value} {
  167.     catch {destroy .abcd}
  168.     set x [button .abcd]
  169.     destroy .abc
  170.     set x
  171. } {.abcd}
  172. test button-4.1 {ButtonWidgetCmd - too few arguments} {
  173.     list [catch {.b} msg] $msg
  174. } {1 {wrong # args: should be ".b option ?arg arg ...?"}}
  175. test button-4.2 {ButtonWidgetCmd - bad option name} {
  176.     list [catch {.b c} msg] $msg
  177. } {1 {ambiguous option "c": must be cget, configure, flash, or invoke}}
  178. test button-4.3 {ButtonWidgetCmd - bad option name} {
  179.     list [catch {.b bogus} msg] $msg
  180. } {1 {bad option "bogus": must be cget, configure, flash, or invoke}}
  181. test button-4.4 {ButtonWidgetCmd procedure, "cget" option} {
  182.     list [catch {.b cget a b} msg] $msg
  183. } {1 {wrong # args: should be ".b cget option"}}
  184. test button-4.5 {ButtonWidgetCmd procedure, "cget" option} {
  185.     list [catch {.b cget -gorp} msg] $msg
  186. } {1 {unknown option "-gorp"}}
  187. test button-4.6 {ButtonWidgetCmd procedure, "cget" option} {
  188.     .b configure -highlightthickness 3
  189.     .b cget -highlightthickness
  190. } {3}
  191. test button-4.7 {ButtonWidgetCmd procedure, "cget" option} {
  192.     catch {.l cget -disabledforeground}
  193. } {0}
  194. test button-4.8 {ButtonWidgetCmd procedure, "cget" option} {
  195.     catch {.b cget -disabledforeground}
  196. } {0}
  197. test button-4.9 {ButtonWidgetCmd procedure, "cget" option} {
  198.     list [catch {.b cget -variable} msg] $msg
  199. } {1 {unknown option "-variable"}}
  200. test button-4.10 {ButtonWidgetCmd procedure, "cget" option} {
  201.     catch {.c cget -variable}
  202. } {0}
  203. test button-4.11 {ButtonWidgetCmd procedure, "cget" option} {
  204.     list [catch {.c cget -value} msg] $msg
  205. } {1 {unknown option "-value"}}
  206. test button-4.12 {ButtonWidgetCmd procedure, "cget" option} {
  207.     catch {.r cget -value}
  208. } {0}
  209. test button-4.13 {ButtonWidgetCmd procedure, "cget" option} {
  210.     list [catch {.r cget -onvalue} msg] $msg
  211. } {1 {unknown option "-onvalue"}}
  212. test button-4.14 {ButtonWidgetCmd procedure, "configure" option} {
  213.     llength [.c configure]
  214. } {39}
  215. test button-4.15 {ButtonWidgetCmd procedure, "configure" option} {
  216.     list [catch {.b configure -gorp} msg] $msg
  217. } {1 {unknown option "-gorp"}}
  218. test button-4.16 {ButtonWidgetCmd procedure, "configure" option} {
  219.     list [catch {.b co -bg #ffffff -fg} msg] $msg
  220. } {1 {value for "-fg" missing}}
  221. test button-4.17 {ButtonWidgetCmd procedure, "configure" option} {
  222.     .b configure -fg #123456
  223.     .b configure -bg #654321
  224.     lindex [.b configure -fg] 4
  225. } {#123456}
  226. .c configure -variable value -onvalue 1 -offvalue 0
  227. .r configure -variable value2 -value red
  228. test button-4.18 {ButtonWidgetCmd procedure, "deselect" option} {
  229.     list [catch {.c deselect foo} msg] $msg
  230. } {1 {wrong # args: should be ".c deselect"}}
  231. test button-4.19 {ButtonWidgetCmd procedure, "deselect" option} {
  232.     list [catch {.l deselect} msg] $msg
  233. } {1 {bad option "deselect": must be cget or configure}}
  234. test button-4.20 {ButtonWidgetCmd procedure, "deselect" option} {
  235.     list [catch {.b deselect} msg] $msg
  236. } {1 {bad option "deselect": must be cget, configure, flash, or invoke}}
  237. test button-4.21 {ButtonWidgetCmd procedure, "deselect" option} {
  238.     set value 1
  239.     .c d
  240.     set value
  241. } {0}
  242. test button-4.22 {ButtonWidgetCmd procedure, "deselect" option} {
  243.     set value2 green
  244.     .r deselect
  245.     set value2
  246. } {green}
  247. test button-4.23 {ButtonWidgetCmd procedure, "deselect" option} {
  248.     set value2 red
  249.     .r deselect
  250.     set value2
  251. } {}
  252. test button-4.24 {ButtonWidgetCmd procedure, "deselect" option} {
  253.     set value 1
  254.     trace variable value w bogusTrace
  255.     set result [list [catch {.c deselect} msg] $msg $errorInfo $value]
  256.     trace vdelete value w bogusTrace
  257.     set result
  258. } {1 {can't set "value": trace aborted} {can't set "value": trace aborted
  259.     while executing
  260. ".c deselect"} 0}
  261. test button-4.25 {ButtonWidgetCmd procedure, "deselect" option} {
  262.     set value2 red
  263.     trace variable value2 w bogusTrace
  264.     set result [list [catch {.r deselect} msg] $msg $errorInfo $value2]
  265.     trace vdelete value2 w bogusTrace
  266.     set result
  267. } {1 {can't set "value2": trace aborted} {can't set "value2": trace aborted
  268.     while executing
  269. ".r deselect"} {}}
  270. test button-4.26 {ButtonWidgetCmd procedure, "flash" option} {
  271.     list [catch {.b flash foo} msg] $msg
  272. } {1 {wrong # args: should be ".b flash"}}
  273. test button-4.27 {ButtonWidgetCmd procedure, "flash" option} {
  274.     list [catch {.l flash} msg] $msg
  275. } {1 {bad option "flash": must be cget or configure}}
  276. test button-4.28 {ButtonWidgetCmd procedure, "flash" option} {
  277.     list [catch {.b flash} msg] $msg
  278. } {0 {}}
  279. test button-4.29 {ButtonWidgetCmd procedure, "flash" option} {
  280.     list [catch {.c flash} msg] $msg
  281. } {0 {}}
  282. test button-4.30 {ButtonWidgetCmd procedure, "flash" option} {
  283.     list [catch {.r f} msg] $msg
  284. } {0 {}}
  285. test button-4.31 {ButtonWidgetCmd procedure, "invoke" option} {
  286.     list [catch {.b invoke foo} msg] $msg
  287. } {1 {wrong # args: should be ".b invoke"}}
  288. test button-4.32 {ButtonWidgetCmd procedure, "invoke" option} {
  289.     list [catch {.l invoke} msg] $msg
  290. } {1 {bad option "invoke": must be cget or configure}}
  291. test button-4.33 {ButtonWidgetCmd procedure, "invoke" option} {
  292.     .b configure -command {set x invoked}
  293.     set x "not invoked"
  294.     .b invoke
  295.     set x
  296. } {invoked}
  297. test button-4.34 {ButtonWidgetCmd procedure, "invoke" option} {
  298.     .b configure -command {set x invoked} -state disabled
  299.     set x "not invoked"
  300.     .b invoke
  301.     set x
  302. } {not invoked}
  303. test button-4.35 {ButtonWidgetCmd procedure, "invoke" option} {
  304.     set value bogus
  305.     .c configure -command {set x invoked} -variable value -onvalue 1 
  306.     -offvalue 0
  307.     set x "not invoked"
  308.     .c invoke
  309.     list $x $value
  310. } {invoked 1}
  311. test button-4.36 {ButtonWidgetCmd procedure, "invoke" option} {
  312.     set value2 green
  313.     .r configure -command {set x invoked} -variable value2 -value red
  314.     set x "not invoked"
  315.     .r i
  316.     list $x $value2
  317. } {invoked red}
  318. test button-4.37 {ButtonWidgetCmd procedure, "select" option} {
  319.     list [catch {.l select} msg] $msg
  320. } {1 {bad option "select": must be cget or configure}}
  321. test button-4.38 {ButtonWidgetCmd procedure, "select" option} {
  322.     list [catch {.b select} msg] $msg
  323. } {1 {bad option "select": must be cget, configure, flash, or invoke}}
  324. test button-4.39 {ButtonWidgetCmd procedure, "select" option} {
  325.     list [catch {.c select foo} msg] $msg
  326. } {1 {wrong # args: should be ".c select"}}
  327. test button-4.40 {ButtonWidgetCmd procedure, "select" option} {
  328.     set value bogus
  329.     .c configure -command {} -variable value -onvalue lovely -offvalue 0
  330.     .c s
  331.     set value
  332. } {lovely}
  333. test button-4.41 {ButtonWidgetCmd procedure, "select" option} {
  334.     set value2 green
  335.     .r configure -command {} -variable value2 -value red
  336.     .r select
  337.     set value2
  338. } {red}
  339. test button-4.42 {ButtonWidgetCmd procedure, "select" option} {
  340.     set value2 yellow
  341.     trace variable value2 w bogusTrace
  342.     set result [list [catch {.r select} msg] $msg $errorInfo $value2]
  343.     trace vdelete value2 w bogusTrace
  344.     set result
  345. } {1 {can't set "value2": trace aborted} {can't set "value2": trace aborted
  346.     while executing
  347. ".r select"} red}
  348. test button-4.43 {ButtonWidgetCmd procedure, "toggle" option} {
  349.     list [catch {.l toggle} msg] $msg
  350. } {1 {bad option "toggle": must be cget or configure}}
  351. test button-4.44 {ButtonWidgetCmd procedure, "toggle" option} {
  352.     list [catch {.b toggle} msg] $msg
  353. } {1 {bad option "toggle": must be cget, configure, flash, or invoke}}
  354. test button-4.45 {ButtonWidgetCmd procedure, "toggle" option} {
  355.     list [catch {.r toggle} msg] $msg
  356. } {1 {bad option "toggle": must be cget, configure, deselect, flash, invoke, or select}}
  357. test button-4.46 {ButtonWidgetCmd procedure, "toggle" option} {
  358.     list [catch {.c toggle foo} msg] $msg
  359. } {1 {wrong # args: should be ".c toggle"}}
  360. test button-4.47 {ButtonWidgetCmd procedure, "toggle" option} {
  361.     set value bogus
  362.     .c configure -command {} -variable value -onvalue sunshine -offvalue rain
  363.     .c toggle
  364.     set result $value
  365.     .c toggle
  366.     lappend result $value
  367.     .c toggle
  368.     lappend result $value
  369. } {sunshine rain sunshine}
  370. test button-4.48 {ButtonWidgetCmd procedure, "toggle" option} {
  371.     .c configure -onvalue xyz -offvalue abc
  372.     set value xyz
  373.     trace variable value w bogusTrace
  374.     set result [list [catch {.c toggle} msg] $msg $errorInfo $value]
  375.     trace vdelete value w bogusTrace
  376.     set result
  377. } {1 {can't set "value": trace aborted} {can't set "value": trace aborted
  378.     while executing
  379. ".c toggle"} abc}
  380. test button-4.49 {ButtonWidgetCmd procedure, "toggle" option} {
  381.     .c configure -onvalue xyz -offvalue abc
  382.     set value abc
  383.     trace variable value w bogusTrace
  384.     set result [list [catch {.c toggle} msg] $msg $errorInfo $value]
  385.     trace vdelete value w bogusTrace
  386.     set result
  387. } {1 {can't set "value": trace aborted} {can't set "value": trace aborted
  388.     while executing
  389. ".c toggle"} xyz}
  390. test button-4.50 {ButtonWidgetCmd procedure, "toggle" option} {
  391.     catch {unset value}; set value(1) 1;
  392.     set result [list [catch {.c toggle} msg] $msg $errorInfo]
  393.     unset value;
  394.     set result
  395. } {1 {can't set "value": variable is array} {can't set "value": variable is array
  396.     while executing
  397. ".c toggle"}}
  398. test button-5.1 {DestroyButton procedure} testImageType {
  399.     image create test image1
  400.     button .b1 -image image1
  401.     button .b2 -fg #ff0000 -text "Button 2"
  402.     button .b3 -state active -text "Button 3"
  403.     button .b4 -disabledforeground #0000ff -state disabled -text "Button 4"
  404.     checkbutton .b5 -variable x -text "Checkbutton 5"
  405.     set x 1
  406.     pack .b1 .b2 .b3 .b4 .b5
  407.     update
  408.     deleteWindows
  409. } {}
  410. test button-6.1 {ConfigureButton - textvariable trace} {
  411.     catch {destroy .b1}
  412.     button .b1 -bd 4 -bg green
  413.     catch {.b1 configure -bd 7 -bg green -fg bogus}
  414.     list [catch {.b1 configure -bd 7 -bg red -fg bogus} msg] 
  415.     $msg [.b1 cget -bd] [.b1 cget -bg]
  416. } {1 {unknown color name "bogus"} 4 green}
  417. test button-6.2 {ConfigureButton - textvariable trace} {
  418.     catch {destroy .b1}
  419.     set x From-x
  420.     set y From-y
  421.     button .b1 -textvariable x
  422.     .b1 configure -textvariable y
  423.     set x New
  424.     lindex [.b1 configure -text] 4
  425. } {From-y}
  426. test button-6.2 {ConfigureButton - variable traces} {
  427.     catch {destroy .b1}
  428.     catch {unset x}
  429.     checkbutton .b1 -variable x
  430.     set x 1
  431.     set y 1
  432.     .b1 configure -textvariable y
  433.     set x 0
  434.     .b1 toggle
  435.     set y
  436. } {1}
  437. test button-6.3 {ConfigureButton - image handling} testImageType {
  438.     catch {destroy .b1}
  439.     eval image delete [image names]
  440.     image create test image1
  441.     image create test image2
  442.     button .b1 -image image1
  443.     image delete image1
  444.     .b1 configure -image image2
  445.     image names
  446. } {image2}
  447. test button-6.5 {ConfigureButton - default value for variable} {
  448.     catch {destroy .b1}
  449.     checkbutton .b1
  450.     .b1 cget -variable
  451. } {b1}
  452. test button-6.6 {ConfigureButton - setting selected state from variable} {
  453.     catch {destroy .b1}
  454.     set x 0
  455.     set y Shiny
  456.     checkbutton .b1 -variable x
  457.     .b1 configure -variable y -onvalue Shiny
  458.     .b1 toggle
  459.     set y
  460. } 0
  461. test button-6.7 {ConfigureButton - setting selected state from variable} {
  462.     catch {destroy .b1}
  463.     catch {unset x}
  464.     checkbutton .b1 -variable x -offvalue Bogus
  465.     set x
  466. } Bogus
  467. test button-6.8 {ConfigureButton - setting selected state from variable} {
  468.     catch {destroy .b1}
  469.     catch {unset x}
  470.     radiobutton .b1 -variable x
  471.     set x
  472. } {}
  473. test button-6.9 {ConfigureButton - error in setting variable} {
  474.     catch {destroy .b1}
  475.     catch {unset x}
  476.     trace variable x w bogusTrace
  477.     set result [list [catch {radiobutton .b1 -variable x} msg] $msg]
  478.     trace vdelete x w bogusTrace
  479.     set result
  480. } {1 {can't set "x": trace aborted}}
  481. test button-6.10 {ConfigureButton - bad image name} {
  482.     catch {destroy .b1}
  483.     list [catch {button .b1 -image bogus} msg] $msg
  484. } {1 {image "bogus" doesn't exist}}
  485. test button-6.11 {ConfigureButton - setting variable from current text value} {
  486.     catch {destroy .b1}
  487.     catch {unset x}
  488.     button .b1 -textvariable x -text "Button 1"
  489.     set x
  490. } {Button 1}
  491. test button-6.12 {ConfigureButton - using current value of variable} {
  492.     catch {destroy .b1}
  493.     set x Override
  494.     button .b1 -textvariable x -text "Button 1"
  495.     set x
  496. } {Override}
  497. test button-6.13 {ConfigureButton - variable handling} {
  498.     catch {destroy .b1}
  499.     catch {unset x}
  500.     trace variable x w bogusTrace
  501.     set result [list [catch {radiobutton .b1 -text foo -textvariable x} msg] 
  502.     $msg $x]
  503.     trace vdelete x w bogusTrace
  504.     set result
  505. } {1 {can't set "x": trace aborted} foo}
  506. test button-6.14 {ConfigureButton - -width option} {
  507.     catch {destroy .b1}
  508.     button .b1 -text "Button 1"
  509.     list [catch {.b1 configure -width 1i} msg] $msg $errorInfo
  510. } {1 {expected integer but got "1i"} {expected integer but got "1i"
  511.     (processing -width option)
  512.     invoked from within
  513. ".b1 configure -width 1i"}}
  514. test button-6.15 {ConfigureButton - -height option} {
  515.     catch {destroy .b1}
  516.     button .b1 -text "Button 1"
  517.     list [catch {.b1 configure -height 0.5c} msg] $msg $errorInfo
  518. } {1 {expected integer but got "0.5c"} {expected integer but got "0.5c"
  519.     (processing -height option)
  520.     invoked from within
  521. ".b1 configure -height 0.5c"}}
  522. test button-6.16 {ConfigureButton - -width option} {
  523.     catch {destroy .b1}
  524.     button .b1 -bitmap questhead
  525.     list [catch {.b1 configure -width abc} msg] $msg $errorInfo
  526. } {1 {bad screen distance "abc"} {bad screen distance "abc"
  527.     (processing -width option)
  528.     invoked from within
  529. ".b1 configure -width abc"}}
  530. test button-6.17 {ConfigureButton - -height option} testImageType {
  531.     catch {destroy .b1}
  532.     eval image delete [image names]
  533.     image create test image1
  534.     button .b1 -image image1
  535.     list [catch {.b1 configure -height 0.5x} msg] $msg $errorInfo
  536. } {1 {bad screen distance "0.5x"} {bad screen distance "0.5x"
  537.     (processing -height option)
  538.     invoked from within
  539. ".b1 configure -height 0.5x"}}
  540. test button-6.18 {ConfigureButton - computing geometry} {nonPortable fonts} {
  541.     catch {destroy .b1}
  542.     button .b1 -text "Sample text" -width 10 -height 2
  543.     pack .b1
  544.     set result "[winfo reqwidth .b1] [winfo reqheight .b1]"
  545.     .b1 configure -bitmap questhead
  546.     lappend result [winfo reqwidth .b1] [winfo reqheight .b1]
  547. } {102 46 20 12}
  548. test button-6.19 {ConfigureButton - computing geometry} {
  549.     catch {destroy .b1}
  550.     button .b1 -text "Button 1"
  551.     set old [winfo reqwidth .b1]
  552.     .b1 configure -text "Much longer text"
  553.     set new [winfo reqwidth .b1]
  554.     expr $old == $new
  555. } {0}
  556. test button-7.1 {ButtonEventProc procedure} {
  557.     catch {destroy .b1}
  558.     button .b1 -text "Test Button" -command {
  559. destroy .b1
  560. set x [list [winfo exists .b1] [info commands .b1]]
  561.     }
  562.     .b1 invoke
  563.     set x
  564. } {0 {}}
  565. test button-7.2 {ButtonEventProc procedure} {
  566.     deleteWindows
  567.     button .b1 -bg #543210
  568.     rename .b1 .b2
  569.     set x {}
  570.     lappend x [winfo children .]
  571.     lappend x [.b2 cget -bg]
  572.     destroy .b1
  573.     lappend x [info command .b*] [winfo children .]
  574. } {.b1 #543210 {} {}}
  575. test button-8.1 {ButtonCmdDeletedProc procedure} {
  576.     deleteWindows
  577.     button .b1
  578.     rename .b1 {}
  579.     list [info command .b*] [winfo children .]
  580. } {{} {}}
  581. test button-9.1 {TkInvokeButton procedure} {
  582.     catch {destroy .b1}
  583.     set x 0
  584.     checkbutton .b1 -variable x
  585.     set result $x
  586.     .b1 invoke
  587.     lappend result $x
  588.     .b1 invoke
  589.     lappend result $x
  590. } {0 1 0}
  591. test button-9.2 {TkInvokeButton procedure} {
  592.     catch {destroy .b1}
  593.     set x 0
  594.     checkbutton .b1 -variable x
  595.     trace variable x w bogusTrace
  596.     set result [list [catch {.b1 invoke} msg] $msg $x]
  597.     trace vdelete x w bogusTrace
  598.     set result
  599. } {1 {can't set "x": trace aborted} 1}
  600. test button-9.3 {TkInvokeButton procedure} {
  601.     catch {destroy .b1}
  602.     set x 1
  603.     checkbutton .b1 -variable x
  604.     trace variable x w bogusTrace
  605.     set result [list [catch {.b1 invoke} msg] $msg $x]
  606.     trace vdelete x w bogusTrace
  607.     set result
  608. } {1 {can't set "x": trace aborted} 0}
  609. test button-9.4 {TkInvokeButton procedure} {
  610.     catch {destroy .b1}
  611.     set x 0
  612.     radiobutton .b1 -variable x -value red
  613.     set result $x
  614.     .b1 invoke
  615.     lappend result $x
  616.     .b1 invoke
  617.     lappend result $x
  618. } {0 red red}
  619. test button-9.5 {TkInvokeButton procedure} {
  620.     catch {destroy .b1}
  621.     radiobutton .b1 -variable x -value red
  622.     set x green
  623.     trace variable x w bogusTrace
  624.     set result [list [catch {.b1 invoke} msg] $msg $errorInfo $x]
  625.     trace vdelete x w bogusTrace
  626.     set result
  627. } {1 {can't set "x": trace aborted} {can't set "x": trace aborted
  628.     while executing
  629. ".b1 invoke"} red}
  630. test button-9.6 {TkInvokeButton procedure} {
  631.     deleteWindows
  632.     set result untouched
  633.     button .b1 -command {set result invoked}
  634.     list [catch {.b1 invoke} msg] $msg $result
  635. } {0 invoked invoked}
  636. test button-9.7 {TkInvokeButton procedure} {
  637.     deleteWindows
  638.     set result untouched
  639.     set x 0
  640.     checkbutton .b1 -variable x -command {set result "invoked $x"}
  641.     list [catch {.b1 invoke} msg] $msg $result
  642. } {0 {invoked 1} {invoked 1}}
  643. test button-9.8 {TkInvokeButton procedure} {
  644.     deleteWindows
  645.     set result untouched
  646.     set x 0
  647.     radiobutton .b1 -variable x -value red -command {set result "invoked $x"}
  648.     list [catch {.b1 invoke} msg] $msg $result
  649. } {0 {invoked red} {invoked red}}
  650. test button-10.1 {ButtonVarProc procedure} {
  651.     deleteWindows
  652.     set x 1
  653.     checkbutton .b1 -variable x
  654.     unset x
  655.     set result [info exists x]
  656.     .b1 toggle
  657.     lappend result $x
  658.     set x 0
  659.     .b1 toggle
  660.     lappend result $x
  661. } {0 1 1}
  662. test button-10.2 {ButtonVarProc procedure} {
  663.     deleteWindows
  664.     set x 0
  665.     checkbutton .b1 -variable x
  666.     set x 44
  667.     .b1 toggle
  668.     set x
  669. } {1}
  670. test button-10.3 {ButtonVarProc procedure} {
  671.     deleteWindows
  672.     set x 1
  673.     checkbutton .b1 -variable x
  674.     set x 44
  675.     .b1 toggle
  676.     set x
  677. } {1}
  678. test button-10.4 {ButtonVarProc procedure} {
  679.     deleteWindows
  680.     set x 0
  681.     checkbutton .b1 -variable x
  682.     set x 1
  683.     .b1 toggle
  684.     set x
  685. } {0}
  686. test button-10.5 {ButtonVarProc procedure} {
  687.     deleteWindows
  688.     set x 1
  689.     checkbutton .b1 -variable x
  690.     set x 1
  691.     .b1 toggle
  692.     set x
  693. } {0}
  694. test button-10.6 {ButtonVarProc procedure} {
  695.     deleteWindows
  696.     set x 0
  697.     checkbutton .b1 -variable x
  698.     set x 0
  699.     .b1 toggle
  700.     set x
  701. } {1}
  702. test button-10.7 {ButtonVarProc procedure} {
  703.     deleteWindows
  704.     set x 1
  705.     checkbutton .b1 -variable x
  706.     set x 0
  707.     .b1 toggle
  708.     set x
  709. } {1}
  710. test button-10.8 {ButtonVarProc procedure, can't read variable} {
  711.     # This test does nothing but produce a core dump if there's a prbblem.
  712.     deleteWindows
  713.     catch {unset a}
  714.     checkbutton .b1 -variable a
  715.     unset a
  716.     set a(32) 0
  717.     unset a
  718. } {}
  719. test button-11.1 {ButtonTextVarProc procedure} {
  720.     deleteWindows
  721.     set x Label
  722.     button .b1 -textvariable x
  723.     unset x
  724.     set result [list $x [lindex [.b1 configure -text] 4]]
  725.     set x New
  726.     lappend result [lindex [.b1 configure -text] 4]
  727. } {Label Label New}
  728. test button-11.2 {ButtonTextVarProc procedure} {
  729.     deleteWindows
  730.     # Windows buttons have a default min width, so we have to
  731.     # set this to be longer to force the wider button.
  732.     set x ExtraLongLabel
  733.     button .b1 -textvariable x
  734.     set old [winfo reqwidth .b1]
  735.     set x New
  736.     set new [winfo reqwidth .b1]
  737.     list [lindex [.b1 configure -text] 4] [expr $old == $new]
  738. } {New 0}
  739. test button-12.1 {ButtonImageProc procedure} testImageType {
  740.     deleteWindows
  741.     eval image delete [image names]
  742.     image create test image1
  743.     label .b1 -image image1 -padx 0 -pady 0 -bd 0
  744.     pack .b1
  745.     set result "[winfo reqwidth .b1] [winfo reqheight .b1]"
  746.     image1 changed 0 0 0 0 80 100
  747.     lappend result [winfo reqwidth .b1] [winfo reqheight .b1]
  748. } {30 15 80 100}
  749. deleteWindows
  750. set l [interp hidden]
  751. test button-13.1 {button widget vs hidden commands} {
  752.     catch {destroy .b}
  753.     button .b -text hello
  754.     interp hide {} .b
  755.     destroy .b
  756.     list [winfo children .] [interp hidden]
  757. } [list {} $l]
  758. deleteWindows
  759. test button-14.1 {size behaviouor} {
  760.     set res {}
  761.     foreach class {label button radiobutton checkbutton} {
  762. eval destroy [winfo children .]
  763. $class .a -text Hej 
  764. $class .b -text Hej -width 10 -height 1
  765. $class .c -text "" -width 10 -height 1
  766. for {set t 0} {$t < 2} {incr t} {
  767.     set res2 {}
  768.     # With -width, width should not be affected by text change
  769.     lappend res2 [expr {[winfo reqwidth .b] == [winfo reqwidth .c]}]
  770.     # With -height, height should not be affected by text change
  771.     lappend res2 [expr {[winfo reqheight .b] == [winfo reqheight .c]}]
  772.     # A one line text should be as high as -height 1
  773.     lappend res2 [expr {[winfo reqheight .a] == [winfo reqheight .b]}]
  774.     lappend res $res2
  775.     
  776.     # Do the second round with another font
  777.     .a configure -font "Arial 20"
  778.     .b configure -font "Arial 20"
  779.     .c configure -font "Arial 20"
  780. }
  781.     }
  782.     set res
  783. } {{1 1 1} {1 1 1} {1 1 1} {1 1 1} {1 1 1} {1 1 1} {1 1 1} {1 1 1}}
  784. deleteWindows
  785. option clear
  786. # cleanup
  787. ::tcltest::cleanupTests
  788. return