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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test menus in Tk.  It is
  2. # organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1995-1997 Sun Microsystems, Inc.
  5. # Copyright (c) 1998-1999 by Scriptics Corporation.
  6. # All rights reserved.
  7. #
  8. # RCS: @(#) $Id: menu.test,v 1.13.2.2 2006/11/24 18:11:54 hobbs Exp $
  9. package require tcltest 2.1
  10. namespace import -force tcltest::configure
  11. namespace import -force tcltest::testsDirectory
  12. configure -testdir [file join [pwd] [file dirname [info script]]]
  13. configure -loadfile [file join [testsDirectory] constraints.tcl]
  14. tcltest::loadTestedCommands
  15. test menu-1.1 {Tk_MenuCmd procedure} {
  16.     list [catch menu msg] $msg
  17. } {1 {wrong # args: should be "menu pathName ?options?"}}
  18. test menu-1.2 {Tk_MenuCmd procedure} {
  19.     list [catch "menu bogus" msg] $msg
  20. } {1 {bad window path name "bogus"}}
  21. test menu-1.3 {Tk_MenuCmd procedure} {
  22.     list [catch "menu .m1 foo" msg] $msg
  23. } {1 {unknown option "foo"}}
  24. test menu-1.4 {Tk_MenuCmd procedure} {
  25.     catch {destroy .m1}
  26.     list [catch {menu .m1} msg] $msg [destroy .m1]
  27. } {0 .m1 {}}
  28. test menu-1.5 {Tk_MenuCmd - creating menubar} {
  29.     catch {destroy .m1}
  30.     menu .m1
  31.     .m1 add cascade -label Test -menu ""
  32.     list [. configure -menu .m1] [. configure -menu ""] [destroy .m1]
  33. } {{} {} {}}
  34. test menu-1.6 {Tk_MenuCmd procedure menu ref no cascade} {
  35.     catch {destroy .t2}
  36.     catch {destroy .m1}
  37.     toplevel .t2 -menu .m1
  38.     wm geometry .t2 +0+0
  39.     list [catch {menu .m1} msg] $msg [destroy .m1 .t2]
  40. } {0 .m1 {}}
  41. test menu-1.7 {Tk_MenuCmd procedure one clone cascade} {
  42.     catch {destroy .m1}
  43.     catch {destroy .m2}
  44.     catch {destroy .t2}
  45.     toplevel .t2 -menu .m1
  46.     wm geometry .t2 +0+0
  47.     menu .m1
  48.     .m1 add cascade -menu .m2
  49.     list [catch {menu .m2} msg] $msg [destroy .t2 .m1 .m2]
  50. } {0 .m2 {}}
  51. test menu-1.8 {Tk_MenuCmd procedure two clone cascades} {
  52.     catch {destroy .m1}
  53.     catch {destroy .t2}
  54.     catch {destroy .t3}
  55.     catch {destroy .m2}
  56.     menu .m1
  57.     .m1 add cascade -menu .m2
  58.     toplevel .t2 -menu .m1
  59.     wm geometry .t2 +0+0
  60.     toplevel .t3 -menu .m1
  61.     wm geometry .t3 +0+0
  62.     list [catch {menu .m2} msg] $msg [destroy .t2 .t3 .m1 .m2]
  63. } {0 .m2 {}}
  64. test menu-1.9 {Tk_MenuCmd procedure two clone cascades different order} {
  65.     catch {destroy .t2}
  66.     catch {destroy .m1}
  67.     catch {destroy .t3}
  68.     catch {destroy .m2}
  69.     toplevel .t2 -menu .m1
  70.     wm geometry .t2 +0+0
  71.     menu .m1
  72.     .m1 add cascade -menu .m2
  73.     toplevel .t3 -menu .m1
  74.     wm geometry .t3 +0+0
  75.     list [catch {menu .m2} msg] $msg [destroy .t2 .t3 .m1 .m2]
  76. } {0 .m2 {}}
  77. test menu-1.10 {Tk_MenuCmd procedure two clone cascades menus last} {
  78.     catch {destroy .t2}
  79.     catch {destroy .t3}
  80.     catch {destroy .m1}
  81.     catch {destroy .m2}
  82.     toplevel .t2 -menu .m1
  83.     wm geometry .t2 +0+0
  84.     toplevel .t3 -menu .m1
  85.     wm geometry .t3 +0+0
  86.     menu .m1
  87.     .m1 add cascade -menu .m2
  88.     list [catch {menu .m2} msg] $msg [destroy .t2 .t3 .m1 .m2]
  89. } {0 .m2 {}}
  90. test menu-1.11 {Tk_MenuCmd procedure three clones cascades} {
  91.     catch {destroy .t2}
  92.     catch {destroy .t3}
  93.     catch {destroy .t4}
  94.     catch {destroy .m1}
  95.     catch {destroy .m2}
  96.     toplevel .t2 -menu .m1
  97.     wm geometry .t2 +0+0
  98.     toplevel .t3 -menu .m1
  99.     wm geometry .t3 +0+0
  100.     toplevel .t4 -menu .m1
  101.     wm geometry .t4 +0+0
  102.     menu .m1
  103.     .m1 add cascade -menu .m2
  104.     list [catch {menu .m2} msg] $msg [destroy .t2 .t3 .t4 .m1 .m2]
  105. } {0 .m2 {}}
  106. test menu-1.12 {Tk_MenuCmd procedure} {
  107.     catch {destroy .t2}
  108.     catch {destroy .m1}
  109.     toplevel .t2 -menu .m1
  110.     wm geometry .t2 +0+0
  111.     list [catch {menu .m1} msg] $msg [destroy .t2 .m1]
  112. } {0 .m1 {}}
  113. test menu-1.13 {Tk_MenuCmd procedure} {
  114.     catch {destroy .t2}
  115.     catch {destroy .t3}
  116.     catch {destroy .m1}
  117.     toplevel .t2 -menu .m1
  118.     wm geometry .t2 +0+0
  119.     toplevel .t3 -menu .m1
  120.     wm geometry .t3 +0+0
  121.     list [catch {menu .m1} msg] $msg [destroy .t2 .t3 .m1]
  122. } {0 .m1 {}}
  123. test menu-1.14 {Tk_MenuCmd procedure} {
  124.     catch {destroy .t2}
  125.     catch {destroy .t3}
  126.     catch {destroy .t4}
  127.     catch {destroy .m1}
  128.     toplevel .t2 -menu .m1
  129.     wm geometry .t2 +0+0
  130.     toplevel .t3 -menu .m1
  131.     wm geometry .t3 +0+0
  132.     toplevel .t4 -menu .m1
  133.     wm geometry .t4 +0+0
  134.     list [catch {menu .m1} msg] $msg [destroy .t2 .t3 .t4 .m1]
  135. } {0 .m1 {}}
  136. catch {destroy .m1}
  137. menu .m1
  138. set i 1
  139. foreach configTest {
  140.     {-activebackground #012345 #012345 non-existent
  141.     {unknown color name "non-existent"}}
  142.     {-activeborderwidth 1.3 1.3 badValue {bad screen distance "badValue"}}
  143.     {-activeforeground #ff0000 #ff0000 non-existent
  144.     {unknown color name "non-existent"}}
  145.     {-background #ff0000 #ff0000 non-existent
  146.     {unknown color name "non-existent"}}
  147.     {-bg #110022 #110022 bogus {unknown color name "bogus"}}
  148.     {-borderwidth 1.3 1.3 badValue {bad screen distance "badValue"}}
  149.     {-cursor arrow arrow badValue {bad cursor spec "badValue"}}
  150.     {-disabledforeground #00ff00 #00ff00 xyzzy {unknown color name "xyzzy"}}
  151.     {-fg #110022 #110022 bogus {unknown color name "bogus"}}
  152.     {-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* 
  153.     -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* {}
  154.     {font "" doesn't exist}}
  155.     {-foreground #110022 #110022 bogus {unknown color name "bogus"}}
  156.     {-postcommand "any old string" "any old string" {} {}}
  157.     {-relief groove groove 1.5 {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken}}
  158.     {-selectcolor #110022 #110022 bogus {unknown color name "bogus"}}
  159.     {-takefocus "any string" "any string" {} {}}
  160.     {-tearoff 0 0}
  161.     {-tearoff 1 1}
  162.     {-tearoffcommand "any old string" "any old string" {} {}}
  163. } {
  164.     set name [lindex $configTest 0]
  165.     set value [lindex $configTest 1]
  166.     set result [lindex $configTest 2]
  167.     test menu-2.$i [list configuration options $name $value $result] {
  168. .m1 configure $name $value
  169. lindex [.m1 configure $name] 4
  170.     } $result
  171.     incr i
  172.     if {[lindex $configTest 3] != ""} {
  173. set value [lindex $configTest 3]
  174. set result [lindex $configTest 4]
  175. test menu-2.$i [list configuration options $name $value $result] {
  176.     list [catch {.m1 configure $name $value} msg] $msg
  177. } [list 1 $result]
  178.     }
  179.     .m1 configure $name [lindex [.m1 configure $name] 3]
  180.     incr i
  181. }
  182. destroy .m1
  183. # We need to test all of the options with all of the different types of
  184. # menu entries. The following code sets up .m1 with 6 items. It then
  185. # runs through the big table below it.
  186. # index 0 is tearoff, 1 command, 2 cascade, 3 separator, 4 checkbutton, 
  187. # 5 radiobutton
  188. menu .m1
  189. .m1 add command -label "command"
  190. menu .m2
  191. .m2 add command -label "test"
  192. .m1 add cascade -label "cascade" -menu .m2
  193. .m1 add separator
  194. .m1 add checkbutton -label "checkbutton" -variable check -onvalue on -offvalue off
  195. .m1 add radiobutton -label "radiobutton" -variable radio
  196. image create photo image1 -file [file join $tk_library demos images earth.gif]
  197. foreach configTest {
  198.     {-activebackground 
  199.         {{#012345 
  200.             {{unknown option "-activebackground"} #012345 #012345 
  201.             {unknown option "-activebackground"} #012345 #012345
  202.             }
  203.         }
  204.         {non-existent 
  205.             {{unknown option "-activebackground"} 
  206.     {unknown color name "non-existent"}
  207.     {unknown color name "non-existent"}
  208.     {unknown option "-activebackground"}
  209.     {unknown color name "non-existent"}
  210.     {unknown color name "non-existent"}
  211.     }
  212. }}
  213.     }
  214.     {-activeforeground
  215.      {{#ff0000 
  216.     {{unknown option "-activeforeground"}
  217.     #ff0000 #ff0000 {unknown option "-activeforeground"} #ff0000 #ff0000
  218.     }
  219. }
  220. {non-existent
  221.     {{unknown option "-activeforeground"} 
  222.     {unknown color name "non-existent"}
  223.     {unknown color name "non-existent"}
  224.     {unknown option "-activeforeground"}
  225.     {unknown color name "non-existent"}
  226.     {unknown color name "non-existent"}
  227.     }
  228. }}
  229.     }
  230.     {-accelerator
  231.      {{"Ctrl+S" 
  232.     {{unknown option "-accelerator"}
  233.     "Ctrl+S" "Ctrl+S" {unknown option "-accelerator"} 
  234.     "Ctrl+S" "Ctrl+S"
  235.     }
  236. }}
  237.     }
  238.     {-background
  239.      {{#ff0000 
  240.          {#ff0000 #ff0000 #ff0000 #ff0000 #ff0000 #ff0000
  241.     }
  242. }
  243. {non-existent
  244.     {{unknown color name "non-existent"} 
  245.     {unknown color name "non-existent"}
  246.     {unknown color name "non-existent"}
  247.     {unknown color name "non-existent"}
  248.     {unknown color name "non-existent"}
  249.     {unknown color name "non-existent"}
  250.     }
  251. }}
  252.     }
  253.     {-bitmap
  254.      {{questhead 
  255.     {{unknown option "-bitmap"} questhead questhead 
  256.     {unknown option "-bitmap"} questhead questhead
  257.     }
  258. }
  259. {badValue
  260.     {{unknown option "-bitmap"} 
  261.     {bitmap "badValue" not defined}
  262.     {bitmap "badValue" not defined}
  263.     {unknown option "-bitmap"}
  264.     {bitmap "badValue" not defined}
  265.     {bitmap "badValue" not defined}
  266.     }
  267. }}
  268.     }
  269.     {-columnbreak
  270. {{1
  271.     {{unknown option "-columnbreak"} 1 1 
  272.     {unknown option "-columnbreak"} 1 1}
  273. }}
  274.     }
  275.     {-command
  276.      {{beep 
  277.     {{unknown option "-command"} beep beep 
  278.     {unknown option "-command"} beep beep
  279.     }
  280. }}
  281.     }
  282.     {-font
  283.      {{-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* 
  284.     {{unknown option "-font"}
  285.          -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*
  286.          -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* 
  287.     {unknown option "-font"} 
  288.          -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*
  289.          -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*
  290.     }
  291. }
  292. {{kill rock stars}
  293.     {{unknown option "-font"}
  294.     {expected integer but got "rock"}
  295.     {expected integer but got "rock"}
  296.     {unknown option "-font"}
  297.     {expected integer but got "rock"}
  298.     {expected integer but got "rock"}
  299.     }
  300. }}
  301.     }
  302.     {-foreground
  303.      {{#110022 
  304.     {{unknown option "-foreground"} #110022 #110022 
  305.     {unknown option "-foreground"} #110022 #110022
  306.     }
  307. }
  308. {non-existent
  309.     {{unknown option "-foreground"} 
  310.     {unknown color name "non-existent"}
  311.     {unknown color name "non-existent"}
  312.     {unknown option "-foreground"}
  313.     {unknown color name "non-existent"}
  314.     {unknown color name "non-existent"}
  315.     }
  316. }}
  317.     }
  318.     {-image
  319.      {{image1 
  320.     {{unknown option "-image"} image1 image1 
  321.     {unknown option "-image"} image1 image1
  322.     }
  323. }
  324. {bogus
  325.     {{unknown option "-image"} 
  326.     {image "bogus" doesn't exist}
  327.     {image "bogus" doesn't exist}
  328.     {unknown option "-image"}
  329.     {image "bogus" doesn't exist}
  330.     {image "bogus" doesn't exist}
  331.     }
  332. }
  333. {""
  334.     {{unknown option "-image"}
  335.     {}
  336.     {}
  337.     {unknown option "-image"}
  338.     {}
  339.     {}
  340.     }
  341. }}
  342.     }
  343.     {-indicatoron
  344.      {{1 
  345.     {{unknown option "-indicatoron"}
  346.     {unknown option "-indicatoron"}
  347.     {unknown option "-indicatoron"} 
  348.     {unknown option "-indicatoron"} 1 1
  349.     }
  350. }}
  351.     }
  352.     {-label
  353.      {{test 
  354.     {{unknown option "-label"} test test 
  355.     {unknown option "-label"} test test
  356.     }
  357. }}
  358.     }
  359.     {-menu
  360.      {{.m2 
  361.     {{unknown option "-menu"}
  362.     {unknown option "-menu"} .m2 
  363.     {unknown option "-menu"}
  364.     {unknown option "-menu"}
  365.     {unknown option "-menu"}
  366.     }
  367. }}
  368.     }
  369.     {-offvalue
  370.      {{off
  371.     {{unknown option "-offvalue"} 
  372.     {unknown option "-offvalue"}
  373.     {unknown option "-offvalue"}
  374.     {unknown option "-offvalue"}
  375.          off
  376.     {unknown option "-offvalue"}
  377.     }
  378. }}
  379.     }
  380.     {-onvalue
  381.      {{on
  382.     {{unknown option "-onvalue"}
  383.     {unknown option "-onvalue"}
  384.     {unknown option "-onvalue"}
  385.     {unknown option "-onvalue"}
  386.          on 
  387.     {unknown option "-onvalue"}
  388.     }
  389. }}
  390.     }
  391.     {-selectcolor
  392.      {{#110022 
  393.     {{unknown option "-selectcolor"} 
  394.     {unknown option "-selectcolor"}
  395.     {unknown option "-selectcolor"} 
  396.     {unknown option "-selectcolor"}
  397.          #110022
  398.          #110022
  399.     }
  400. }
  401. {non-existent
  402.     {{unknown option "-selectcolor"} 
  403.     {unknown option "-selectcolor"}
  404.     {unknown option "-selectcolor"}
  405.     {unknown option "-selectcolor"}
  406.     {unknown color name "non-existent"}
  407.     {unknown color name "non-existent"}
  408.     }
  409. }}
  410.     }
  411.     {-selectimage
  412.      {{image1 
  413.          {{unknown option "-selectimage"}
  414.          {unknown option "-selectimage"}
  415.          {unknown option "-selectimage"} 
  416.          {unknown option "-selectimage"} image1 image1
  417.     }
  418. }
  419. {bogus
  420.     {{unknown option "-selectimage"} 
  421.     {unknown option "-selectimage"}
  422.     {unknown option "-selectimage"}
  423.     {unknown option "-selectimage"}
  424.     {image "bogus" doesn't exist}
  425.     {image "bogus" doesn't exist}
  426.     }
  427. }
  428. {""
  429.     {{unknown option "-selectimage"}
  430.     {unknown option "-selectimage"}
  431.     {unknown option "-selectimage"}
  432.     {unknown option "-selectimage"}
  433.     {}
  434.     {}
  435.     }
  436. }}
  437.     }
  438.     {-state
  439.      {{normal 
  440.          {normal normal normal {unknown option "-state"} normal normal
  441.     }
  442. }}
  443.     }
  444.     {-value
  445.      {{"any string"
  446.          {{unknown option "-value"}
  447.          {unknown option "-value"}
  448.          {unknown option "-value"}
  449.          {unknown option "-value"}
  450.          {unknown option "-value"} "any string"
  451.     }
  452. }}
  453.     }
  454.     {-variable
  455.      {{"any string"
  456.          {{unknown option "-variable"}
  457.          {unknown option "-variable"}
  458.          {unknown option "-variable"} 
  459.          {unknown option "-variable"}
  460.          "any string"
  461.          "any string"
  462.     }
  463. }}
  464.     }
  465.     {-underline
  466.      {{0 
  467.          {{unknown option "-underline"} 0 0 
  468.          {unknown option "-underline"} 0 0
  469.     }
  470. }
  471. {3p
  472.     {{unknown option "-underline"} 
  473.     {expected integer but got "3p"}
  474.     {expected integer but got "3p"}
  475.     {unknown option "-underline"}
  476.     {expected integer but got "3p"}
  477.     {expected integer but got "3p"}
  478.     }
  479. }}
  480.     }
  481. } {
  482.     set name [lindex $configTest 0]
  483.     foreach attempt [lindex $configTest 1] {
  484.      set value [lindex $attempt 0]
  485.      set options [lindex $attempt 1]
  486.      foreach item {0 1 2 3 4 5} {
  487.          catch {unset msg}
  488.          test menu-2.$i [list entry configuration options $name $item $value [.m1 type $item]] {
  489.              set result [catch {.m1 entryconfigure $item $name $value} msg]
  490.                 if {$result == 1} {
  491.                  set msg
  492.              } else {
  493.                  lindex [.m1 entryconfigure $item $name] 4
  494.              }
  495.          } [lindex $options $item]
  496.          incr i
  497.      }
  498.     }
  499. }
  500. image delete image1
  501. destroy .m1
  502. destroy .m2
  503. test menu-3.1 {MenuWidgetCmd procedure} {
  504.     catch {destroy .m1}
  505.     menu .m1
  506.     list [catch {.m1} msg] $msg [destroy .m1]
  507. } {1 {wrong # args: should be ".m1 option ?arg arg ...?"} {}}
  508. test menu-3.2 {MenuWidgetCmd, Tcl_Preserve and Tcl_Release} {nonUnixUserInteraction } {
  509.     catch {destroy .m1}
  510.     menu .m1 -postcommand "destroy .m1"
  511.     .m1 add command -label "menu-3.2: Hit Escape"
  512.     list [catch {.m1 post 40 40} msg] $msg
  513. } {0 {}}
  514. test menu-3.3 {MenuWidgetCmd procedure, "activate" option} {
  515.     catch {destroy .m1}
  516.     menu .m1
  517.     .m1 add command -label "test"
  518.     list [catch {.m1 activate} msg] $msg [destroy .m1]
  519. } {1 {wrong # args: should be ".m1 activate index"} {}}
  520. test menu-3.4 {MenuWidgetCmd procedure, "activate" option} {
  521.     catch {destroy .m1}
  522.     menu .m1
  523.     list [catch {.m1 activate "foo"} msg] $msg [destroy .m1]
  524. } {1 {bad menu entry index "foo"} {}}
  525. test menu-3.5 {MenuWidgetCmd procedure, "activate" option} {
  526.     catch {destroy .m1}
  527.     menu .m1
  528.     .m1 add command -label "test"
  529.     .m1 add separator
  530.     list [catch {.m1 activate 2} msg] $msg [destroy .m1]
  531. } {0 {} {}}
  532. test menu-3.6 {MenuWidgetCmd procedure, "activate" option} {
  533.     catch {destroy .m1}
  534.     menu .m1
  535.     .m1 add command -label "test"
  536.     .m1 entryconfigure 1 -state disabled
  537.     list [catch {.m1 activate 1} msg] $msg [destroy .m1]
  538. } {0 {} {}}
  539. test menu-3.7 {MenuWidgetCmd procedure, "activate" option} {
  540.     catch {destroy .m1}
  541.     menu .m1
  542.     .m1 add command -label "test"
  543.     list [catch {.m1 activate 1} msg] $msg [destroy .m1]
  544. } {0 {} {}}
  545. test menu-3.8 {MenuWidgetCmd procedure, "add" option} {
  546.     catch {destroy .m1}
  547.     menu .m1
  548.     list [catch {.m1 add} msg] $msg [destroy .m1]
  549. } {1 {wrong # args: should be ".m1 add type ?options?"} {}}
  550. test menu-3.9 {MenuWidgetCmd procedure, "add" option} {
  551.     catch {destroy .m1}
  552.     menu .m1
  553.     list [catch {.m1 add foo} msg] $msg [destroy .m1]
  554. } {1 {bad menu entry type "foo": must be cascade, checkbutton, command, radiobutton, or separator} {}}
  555. test menu-3.10 {MenuWidgetCmd procedure, "add" option} {
  556.     catch {destroy .m1}
  557.     menu .m1
  558.     list [catch {.m1 add separator} msg] $msg [destroy .m1]
  559. } {0 {} {}}
  560. test menu-3.11 {MenuWidgetCmd procedure, "cget" option} {
  561.     catch {destroy .m1}
  562.     menu .m1
  563.     list [catch {.m1 cget} msg] $msg [destroy .m1]
  564. } {1 {wrong # args: should be ".m1 cget option"} {}}
  565. test menu-3.12 {MenuWidgetCmd procedure, "cget" option} {
  566.     catch {destroy .m1}
  567.     menu .m1
  568.     list [catch {.m1 cget -gorp} msg] $msg [destroy .m1]
  569. } {1 {unknown option "-gorp"} {}}
  570. test menu-3.13 {MenuWidgetCmd procedure, "cget" option} {
  571.     catch {destroy .m1}
  572.     menu .m1
  573.     .m1 configure -postcommand "Some string"
  574.     list [catch {.m1 cget -postcommand} msg] $msg [destroy .m1]
  575. } {0 {Some string} {}}
  576. test menu-3.14 {MenuWidgetCmd procedure, "clone" option} {
  577.     catch {destroy .m1}
  578.     menu .m1
  579.     list [catch {.m1 clone} msg] $msg [destroy .m1]
  580. } {1 {wrong # args: should be ".m1 clone newMenuName ?menuType?"} {}}
  581. test menu-3.15 {MenuWidgetCmd procedure, "clone" option} {
  582.     catch {destroy .m1}
  583.     menu .m1
  584.     list [catch {.m1 clone a b c d} msg] $msg [destroy .m1]
  585. } {1 {wrong # args: should be ".m1 clone newMenuName ?menuType?"} {}}
  586. test menu-3.16 {MenuWidgetCmd procedure, "clone" option} {
  587.     catch {destroy .m1}
  588.     menu .m1
  589.     list [catch {.m1 clone .m1.clone1} msg] $msg [destroy .m1]
  590. } {0 {} {}}
  591. test menu-3.17 {MenuWidgetCmd procedure, "clone" option} {
  592.     catch {destroy .m1}
  593.     menu .m1
  594.     list [catch {.m1 clone .m1.clone1 tearoff} msg] $msg [destroy .m1]
  595. } {0 {} {}}
  596. test menu-3.18 {MenuWidgetCmd procedure, "configure" option} {
  597.     catch {destroy .m1}
  598.     menu .m1
  599.     list [catch {llength [.m1 configure]} msg] $msg [destroy .m1]
  600. } {0 20 {}}
  601. test menu-3.19 {MenuWidgetCmd procedure, "configure" option} {
  602.     catch {destroy .m1}
  603.     menu .m1
  604.     list [catch {.m1 configure -gorp} msg] $msg [destroy .m1]
  605. } {1 {unknown option "-gorp"} {}}
  606. test menu-3.20 {MenuWidgetCmd procedure, "configure" option} {
  607.     catch {destroy .m1}
  608.     menu .m1
  609.     list [catch {.m1 configure -postcommand "A random String"} msg] $msg [destroy .m1]
  610. } {0 {} {}}
  611. test menu-3.21 {MenuWidgetCmd procedure, "configure" option} {
  612.     catch {destroy .m1}
  613.     menu .m1
  614.     .m1 configure -postcommand "Another string"
  615.     list [catch {lindex [.m1 configure -postcommand] 4} msg] $msg [destroy .m1]
  616. } {0 {Another string} {}}
  617. test menu-3.22 {MenuWidgetCmd procedure, "delete" option} {
  618.     catch {destroy .m1}
  619.     menu .m1
  620.     list [catch {.m1 delete} msg] $msg [destroy .m1]
  621. } {1 {wrong # args: should be ".m1 delete first ?last?"} {}}
  622. test menu-3.23 {MenuWidgetCmd procedure, "delete" option} {
  623.     catch {destroy .m1}
  624.     menu .m1
  625.     list [catch {.m1 delete foo} msg] $msg [destroy .m1]
  626. } {1 {bad menu entry index "foo"} {}}
  627. test menu-3.24 {MenuWidgetCmd procedure, "delete" option} {
  628.     catch {destroy .m1}
  629.     menu .m1
  630.     list [catch {.m1 delete 0 "foo"} msg] $msg [destroy .m1]
  631. } {1 {bad menu entry index "foo"} {}}
  632. test menu-3.25 {MenuWidgetCmd procedure, "delete" option} {
  633.     catch {destroy .m1}
  634.     menu .m1
  635.     list [catch {.m1 delete 0} msg] $msg [destroy .m1]
  636. } {0 {} {}}
  637. test menu-3.26 {MenuWidgetCmd procedure, "delete" option} {
  638.     catch {destroy .m1}
  639.     menu .m1
  640.     .m1 add command -label "foo"
  641.     list [catch {.m1 delete 1 0} msg] $msg [destroy .m1] 
  642. } {0 {} {}}
  643. test menu-3.27 {MenuWidgetCmd procedure, "delete" option} {
  644.     catch {destroy .m1}
  645.     menu .m1
  646.     .m1 add command -label "1"
  647.     .m1 add command -label "2"
  648.     .m1 add command -label "3"
  649.     list [catch {.m1 delete 1 3} msg] $msg [destroy .m1]
  650. } {0 {} {}}
  651. test menu-3.28 {MenuWidgetCmd procedure, "delete" option} {
  652.     catch {destroy .m1}
  653.     menu .m1
  654.     .m1 add command -label "1"
  655.     .m1 add command -label "2"
  656.     .m1 add command -label "3"
  657.     .m1 activate 2
  658.     list [catch {.m1 delete 1 3} msg] $msg [destroy .m1]
  659. } {0 {} {}}
  660. test menu-3.29 {MenuWidgetCmd procedure, "delete" option} {
  661.     catch {destroy .m1}
  662.     menu .m1
  663.     .m1 add command -label "1"
  664.     .m1 add command -label "2"
  665.     .m1 add command -label "3"
  666.     .m1 activate 3
  667.     list [catch {.m1 delete 1} msg] $msg [destroy .m1]
  668. } {0 {} {}}
  669. test menu-3.30 {MenuWidgetCmd procedure, "entrycget" option} {
  670.     catch {destroy .m1}
  671.     menu .m1
  672.     list [catch {.m1 entrycget} msg] $msg [destroy .m1]
  673. } {1 {wrong # args: should be ".m1 entrycget index option"} {}}
  674. test menu-3.31 {MenuWidgetCmd procedure, "entrycget" option} {
  675.     catch {destroy .m1}
  676.     menu .m1
  677.     list [catch {.m1 entrycget index option foo} msg] $msg [destroy .m1]
  678. } {1 {wrong # args: should be ".m1 entrycget index option"} {}}
  679. test menu-3.32 {MenuWidgetCmd procedure, "entrycget" option} {
  680.     catch {destroy .m1}
  681.     menu .m1
  682.     list [catch {.m1 entrycget foo -label} msg] $msg [destroy .m1]
  683. } {1 {bad menu entry index "foo"} {}}
  684. test menu-3.33 {MenuWidgetCmd procedure, "entrycget" option} {
  685.     catch {destroy .m1}
  686.     menu .m1
  687.     .m1 add command -label "test"
  688.     list [catch {.m1 entrycget 1 -label} msg] $msg [destroy .m1]
  689. } {0 test {}}
  690. test menu-3.34 {MenuWidgetCmd procedure, "entryconfigure" option} {
  691.     catch {destroy .m1}
  692.     menu .m1
  693.     list [catch {.m1 entryconfigure} msg] $msg [destroy .m1]
  694. } {1 {wrong # args: should be ".m1 entryconfigure index ?option value ...?"} {}}
  695. test menu-3.35 {MenuWidgetCmd procedure, "entryconfigure" option} {
  696.     catch {destroy .m1}
  697.     menu .m1
  698.     list [catch {.m1 entryconfigure foo} msg] $msg [destroy .m1]
  699. } {1 {bad menu entry index "foo"} {}}
  700. test menu-3.36 {MenuWidgetCmd procedure, "entryconfigure" option} {
  701.     catch {destroy .m1}
  702.     menu .m1
  703.     .m1 add command -label "test"
  704.     list [catch {llength [.m1 entryconfigure 1]} msg] $msg [destroy .m1]
  705. } {0 15 {}}
  706. test menu-3.37 {MenuWidgetCmd procedure, "entryconfigure" option} {
  707.     catch {destroy .m1}
  708.     menu .m1
  709.     .m1 add command -label "test"
  710.     list [catch {lindex [.m1 entryconfigure 1 -label] 4} msg] $msg [destroy .m1]
  711. } {0 test {}}
  712. test menu-3.38 {MenuWidgetCmd procedure, "entryconfigure" option} {
  713.     catch {destroy .m1}
  714.     menu .m1
  715.     .m1 add command -label "test"
  716.     .m1 entryconfigure 1 -label "changed"
  717.     list [catch {lindex [.m1 entryconfigure 1 -label] 4} msg] $msg [destroy .m1]
  718. } {0 changed {}}
  719. test menu-3.39 {MenuWidgetCmd procedure, "index" option} {
  720.     catch {destroy .m1}
  721.     menu .m1
  722.     list [catch {.m1 index} msg] $msg [destroy .m1]
  723. } {1 {wrong # args: should be ".m1 index string"} {}}
  724. test menu-3.40 {MenuWidgetCmd procedure, "index" option} {
  725.     catch {destroy .m1}
  726.     menu .m1
  727.     list [catch {.m1 index foo} msg] $msg [destroy .m1]
  728. } {1 {bad menu entry index "foo"} {}}
  729. test menu-3.41 {MenuWidgetCmd procedure, "index" option} {
  730.     catch {destroy .m1}
  731.     menu .m1
  732.     .m1 add command -label "test"
  733.     list [catch {.m1 index "test"} msg] $msg [destroy .m1]
  734. } {0 1 {}}
  735. test menu-3.42 {MenuWidgetCmd procedure, "insert" option} {
  736.     catch {destroy .m1}
  737.     menu .m1
  738.     list [catch {.m1 insert} msg] $msg [destroy .m1]
  739. } {1 {wrong # args: should be ".m1 insert index type ?options?"} {}}
  740. test menu-3.43 {MenuWidgetCmd procedure, "insert" option} {
  741.     catch {destroy .m1}
  742.     menu .m1
  743.     .m1 insert 1 command -label "test"
  744.     list [catch {.m1 entrycget 1 -label} msg] $msg [destroy .m1]
  745. } {0 test {}}
  746. test menu-3.44 {MenuWidgetCmd procedure, "invoke" option} {
  747.     catch {destroy .m1}
  748.     menu .m1
  749.     list [catch {.m1 invoke} msg] $msg [destroy .m1]
  750. } {1 {wrong # args: should be ".m1 invoke index"} {}}
  751. test menu-3.45 {MenuWidgetCmd procedure, "invoke" option} {
  752.     catch {destroy .m1}
  753.     menu .m1
  754.     list [catch {.m1 invoke foo} msg] $msg [destroy .m1]
  755. } {1 {bad menu entry index "foo"} {}}
  756. test menu-3.46 {MenuWidgetCmd procedure, "invoke" option} {
  757.     catch {destroy .m1}
  758.     catch {unset foo}
  759.     menu .m1
  760.     .m1 add command -label "set foo" -command "set foo hello"
  761.     list [catch {.m1 invoke 1} msg] $msg [catch {set foo} msg2] $msg2 [catch {unset foo} msg3] $msg3 [destroy .m1]
  762. } {0 hello 0 hello 0 {} {}}
  763. test menu-3.47 {MenuWidgetCmd procedure, "post" option} {
  764.     catch {destroy .m1}
  765.     menu .m1
  766.     .m1 add command -label "On Windows, hit Escape to get this menu to go away"
  767.     list [catch {.m1 post} msg] $msg [destroy .m1]
  768. } {1 {wrong # args: should be ".m1 post x y"} {}}
  769. test menu-3.48 {MenuWidgetCmd procedure, "post" option} {
  770.     catch {destroy .m1}
  771.     menu .m1
  772.     list [catch {.m1 post foo 40} msg] $msg [destroy .m1]
  773. } {1 {expected integer but got "foo"} {}}
  774. test menu-3.49 {MenuWidgetCmd procedure, "post" option} {
  775.     catch {destroy .m1}
  776.     menu .m1
  777.     list [catch {.m1 post 40 bar} msg] $msg [destroy .m1]
  778. } {1 {expected integer but got "bar"} {}}
  779. test menu-3.50 {MenuWidgetCmd procedure, "post" option} {nonUnixUserInteraction } {
  780.     catch {destroy .m1}
  781.     menu .m1
  782.     .m1 add command -label "menu-3.53: hit Escape" -command "puts hello"
  783.     list [catch {.m1 post 40 40} msg] $msg [destroy .m1]
  784. } {0 {} {}}
  785. test menu-3.51 {MenuWidgetCmd procedure, "postcascade" option} {
  786.     catch {destroy .m1}
  787.     menu .m1
  788.     list [catch {.m1 postcascade} msg] $msg [destroy .m1]
  789. } {1 {wrong # args: should be ".m1 postcascade index"} {}}
  790. test menu-3.52 {MenuWidgetCmd procedure, "postcascade" option} {
  791.     catch {destroy .m1}
  792.     menu .m1
  793.     list [catch {.m1 postcascade foo} msg] $msg [destroy .m1]
  794. } {1 {bad menu entry index "foo"} {}}
  795. test menu-3.53 {MenuWidgetCmd procedure, "postcascade" option} {nonUnixUserInteraction } {
  796.     catch {destroy .m1}
  797.     catch {destroy .m2}
  798.     menu .m1
  799.     .m1 add command -label "menu-3.56 - hit Escape"
  800.     menu .m2
  801.     .m1 post 40 40
  802.     .m1 add cascade -menu .m2
  803.     list [catch {.m1 postcascade 1} msg] $msg [destroy .m1 .m2]
  804. } {0 {} {}}
  805. test menu-3.54 {MenuWidgetCmd procedure, "postcascade" option} {
  806.     catch {destroy .m1}
  807.     catch {destroy .m2}
  808.     menu .m1
  809.     menu .m2
  810.     .m1 add cascade -menu .m2 -label "menu-3.57 - hit Escape"
  811.     .m1 postcascade 1
  812.     list [catch {.m1 postcascade none} msg] $msg [destroy .m1 .m2]
  813. } {0 {} {}}
  814. test menu-3.55 {MenuWidgetCmd procedure, "type" option} {
  815.     catch {destroy .m1}
  816.     menu .m1
  817.     list [catch {.m1 type} msg] $msg [destroy .m1]
  818. } {1 {wrong # args: should be ".m1 type index"} {}}
  819. test menu-3.56 {MenuWidgetCmd procedure, "type" option} {
  820.     catch {destroy .m1}
  821.     menu .m1
  822.     list [catch {.m1 type foo} msg] $msg [destroy .m1]
  823. } {1 {bad menu entry index "foo"} {}}
  824. test menu-3.57 {MenuWidgetCmd procedure, "type" option} {
  825.     catch {destroy .m1}
  826.     menu .m1
  827.     .m1 add command -label "test"
  828.     list [catch {.m1 type 1} msg] $msg [destroy .m1]
  829. } {0 command {}}
  830. test menu-3.58 {MenuWidgetCmd procedure, "type" option} {
  831.     catch {destroy .m1}
  832.     menu .m1
  833.     .m1 add separator
  834.     list [catch {.m1 type 1} msg] $msg [destroy .m1]
  835. } {0 separator {}}
  836. test menu-3.59 {MenuWidgetCmd procedure, "type" option} {
  837.     catch {destroy .m1}
  838.     menu .m1
  839.     .m1 add checkbutton -label "test"
  840.     list [catch {.m1 type 1} msg] $msg [destroy .m1]
  841. } {0 checkbutton {}}
  842. test menu-3.60 {MenuWidgetCmd procedure, "type" option} {
  843.     catch {destroy .m1}
  844.     menu .m1
  845.     .m1 add radiobutton -label "test"
  846.     list [catch {.m1 type 1} msg] $msg [destroy .m1]
  847. } {0 radiobutton {}}
  848. test menu-3.61 {MenuWidgetCmd procedure, "type" option} {
  849.     catch {destroy .m1}
  850.     menu .m1
  851.     .m1 add cascade -label "test"
  852.     list [catch {.m1 type 1} msg] $msg [destroy .m1]
  853. } {0 cascade {}}
  854. test menu-3.62 {MenuWidgetCmd procedure, "type" option} {
  855.     catch {destroy .m1}
  856.     menu .m1
  857.     list [catch {.m1 type 0} msg] $msg [destroy .m1]
  858. } {0 tearoff {}}
  859. test menu-3.63 {MenuWidgetCmd procedure, "unpost" option} {
  860.     catch {destroy .m1}
  861.     menu .m1
  862.     list [catch {.m1 unpost foo} msg] $msg [destroy .m1]
  863. } {1 {wrong # args: should be ".m1 unpost"} {}}
  864. test menu-3.64 {MenuWidgetCmd procedure, "unpost" option} {nonUnixUserInteraction } {
  865.     catch {destroy .m1}
  866.     menu .m1
  867.     .m1 add command -label "menu-3.68 - hit Escape"
  868.     .m1 post 40 40 
  869.     list [catch {.m1 unpost} msg] $msg [destroy .m1]
  870. } {0 {} {}}
  871. test menu-3.65 {MenuWidgetCmd procedure, "yposition" option} {
  872.     catch {destroy .m1}
  873.     menu .m1
  874.     list [catch {.m1 yposition} msg] $msg [destroy .m1]
  875. } {1 {wrong # args: should be ".m1 yposition index"} {}}
  876. test menu-3.66 {MenuWidgetCmd procedure, "yposition" option} {
  877.     catch {destroy .m1}
  878.     menu .m1
  879.     list [catch {.m1 yposition 1}] [destroy .m1]
  880. } {0 {}}
  881. test menu-3.67 {MenuWidgetCmd procedure, bad option} {
  882.     catch {destroy .m1}
  883.     menu .m1
  884.     list [catch {.m1 foo} msg] $msg [destroy .m1]
  885. } {1 {bad option "foo": must be activate, add, cget, clone, configure, delete, entrycget, entryconfigure, index, insert, invoke, post, postcascade, type, unpost, or yposition} {}}
  886. test menu-3.68 {MenuWidgetCmd procedure, fix for bug#508988} {
  887.     set t .t
  888.     set m1 .t.m1
  889.     set c1 .t.c1
  890.     set c2 .t.c2
  891.     toplevel .t
  892.     menu $m1 -tearoff 1
  893.     menu $c1 -tearoff 1
  894.     $c1 add command -label c1
  895.     menu $c2 -tearoff 1
  896.     $c2 add command -label c2
  897.     $m1 add cascade -label c1 -menu $c1
  898.     $t configure -menu $m1
  899.     $m1 entryconfigure 1 -menu $c2 -label c2
  900.     $t configure -menu ""
  901.     set l [list [winfo exists $c1] [winfo exists $c2]]
  902.     destroy $t;
  903.     set l;
  904. } {1 1}
  905. test menu-4.1 {TkInvokeMenu: disabled} {
  906.     catch {destroy .m1}
  907.     catch {unset foo}
  908.     menu .m1
  909.     .m1 add checkbutton -label "test" -variable foo -onvalue on -offvalue off 
  910. -state disabled
  911.     list [catch {.m1 invoke 1} msg] [destroy .m1] $foo
  912. } {0 {} off}
  913. test menu-4.2 {TkInvokeMenu: tearoff} {
  914.     catch {destroy .m1}
  915.     menu .m1
  916.     list [catch {.m1 invoke 0} msg] [destroy .m1]
  917. } {0 {}}
  918. test menu-4.3 {TkInvokeMenu: checkbutton -on} {
  919.     catch {destroy .m1}
  920.     catch {unset foo}
  921.     menu .m1
  922.     .m1 add checkbutton -label "test" -variable foo -onvalue on -offvalue off
  923.     list [catch {.m1 invoke 1} msg] $msg [catch {set foo} msg2] $msg2 [catch {unset foo} msg3] $msg3 [destroy .m1]
  924. } {0 {} 0 on 0 {} {}}
  925. test menu-4.4 {TkInvokeMenu: checkbutton -off} {
  926.     catch {destroy .m1}
  927.     catch {unset foo}
  928.     menu .m1
  929.     .m1 add checkbutton -label "test" -variable foo -onvalue on -offvalue off
  930.     .m1 invoke 1
  931.     list [catch {.m1 invoke 1} msg] $msg [catch {set foo} msg2] $msg2 [catch {unset foo} msg3] $msg3 [destroy .m1]
  932. } {0 {} 0 off 0 {} {}}
  933. test menu-4.5 {TkInvokeMenu: checkbutton array element} {
  934.     catch {destroy .m1}
  935.     catch {unset foo}
  936.     menu .m1
  937.     .m1 add checkbutton -label "test" -variable foo(1) -onvalue on 
  938.     list [catch {.m1 invoke 1} msg] $msg [catch {set foo(1)} msg2] $msg2 [catch {unset foo} msg3] $msg3 [destroy .m1]
  939. } {0 {} 0 on 0 {} {}}
  940. test menu-4.6 {TkInvokeMenu: radiobutton} {
  941.     catch {destroy .m1}
  942.     catch {unset foo}
  943.     menu .m1
  944.     .m1 add radiobutton -label "1" -variable foo -value one
  945.     .m1 add radiobutton -label "2" -variable foo -value two
  946.     .m1 add radiobutton -label "3" -variable foo -value three
  947.     list [catch {.m1 invoke 1} msg] $msg [catch {set foo} msg2] $msg2 [catch {unset foo} msg3] $msg3 [destroy .m1]
  948. } {0 {} 0 one 0 {} {}}
  949. test menu-4.7 {TkInvokeMenu: radiobutton} {
  950.     catch {destroy .m1}
  951.     catch {unset foo}
  952.     menu .m1
  953.     .m1 add radiobutton -label "1" -variable foo -value one
  954.     .m1 add radiobutton -label "2" -variable foo -value two
  955.     .m1 add radiobutton -label "3" -variable foo -value three
  956.     list [catch {.m1 invoke 2} msg] $msg [catch {set foo} msg2] $msg2 [catch {unset foo} msg3] $msg3 [destroy .m1]
  957. } {0 {} 0 two 0 {} {}}
  958. test menu-4.8 {TkInvokeMenu: radiobutton} {
  959.     catch {destroy .m1}
  960.     catch {unset foo}
  961.     menu .m1
  962.     .m1 add radiobutton -label "1" -variable foo -value one
  963.     .m1 add radiobutton -label "2" -variable foo -value two
  964.     .m1 add radiobutton -label "3" -variable foo -value three
  965.     list [catch {.m1 invoke 3} msg] $msg [catch {set foo} msg2] $msg2 [catch {unset foo} msg3] $msg3 [destroy .m1]
  966. } {0 {} 0 three 0 {} {}}
  967. test menu-4.9 {TkInvokeMenu: radiobutton array element} {
  968.     catch {destroy .m1}
  969.     catch {unset foo}
  970.     menu .m1
  971.     .m1 add radiobutton -label "1" -variable foo(2) -value one
  972.     .m1 add radiobutton -label "2" -variable foo(2) -value two
  973.     .m1 add radiobutton -label "3" -variable foo(2) -value three
  974.     list [catch {.m1 invoke 3} msg] $msg [catch {set foo(2)} msg2] $msg2 [catch {unset foo} msg3] $msg3 [destroy .m1]
  975. } {0 {} 0 three 0 {} {}}
  976. test menu-4.10 {TkInvokeMenu} {
  977.     catch {destroy .m1}
  978.     catch {unset menu_test}
  979.     menu .m1
  980.     .m1 add command -label "test" -command "set menu_test menu-4.8"
  981.     list [catch {.m1 invoke 1} msg] $msg [catch {set menu_test} msg2] $msg2 [catch {unset menu_test} msg3] $msg3 [destroy .m1]
  982. } {0 menu-4.8 0 menu-4.8 0 {} {}}
  983. test menu-4.11 {TkInvokeMenu} {
  984.     catch {destroy .m1}
  985.     menu .m1
  986.     .m1 add cascade -label "test" -menu .m1.m2
  987.     list [catch {.m1 invoke 1} msg] $msg [destroy .m1]
  988. } {0 {} {}}
  989. test menu-4.12 {TkInvokeMenu} {
  990.     catch {destroy .m1}
  991.     menu .m1
  992.     .m1 add command -label "test" -command ".m1 delete 1"
  993.     list [catch {.m1 invoke 1} msg] $msg [catch {.m1 type "test"} msg2] $msg2 [destroy .m1]
  994. } {0 {} 1 {bad menu entry index "test"} {}}
  995. test menu-5.1 {DestroyMenuInstance} {
  996.     catch {destroy .m1}
  997.     menu .m1
  998.     list [catch {destroy .m1} msg] $msg
  999. } {0 {}}
  1000. test menu-5.2 {DestroyMenuInstance - cascade menu} {
  1001.     catch {destroy .m1}
  1002.     catch {destroy .m2}
  1003.     menu .m1
  1004.     .m1 add cascade -menu .m2
  1005.     menu .m2
  1006.     list [catch {destroy .m2} msg] $msg [destroy .m1]
  1007. } {0 {} {}}
  1008. test menu-5.3 {DestroyMenuInstance - multiple cascade parents} {
  1009.     catch {destroy .m1}
  1010.     catch {destroy .m2}
  1011.     catch {destroy .m3}
  1012.     menu .m1
  1013.     .m1 add cascade -menu .m3
  1014.     menu .m2
  1015.     .m2 add cascade -menu .m3
  1016.     menu .m3
  1017.     list [catch {destroy .m3} msg] $msg [destroy .m1 .m2]
  1018. } {0 {} {}}
  1019. test menu-5.4 {DestroyMenuInstance - multiple cascade parents} {
  1020.     catch {destroy .m1}
  1021.     catch {destroy .m2}
  1022.     catch {destroy .m3}
  1023.     catch {destroy .m4}
  1024.     menu .m1
  1025.     .m1 add cascade -menu .m4
  1026.     menu .m2
  1027.     .m2 add cascade -menu .m4
  1028.     menu .m3
  1029.     .m3 add cascade -menu .m4
  1030.     menu .m4
  1031.     list [catch {destroy .m4} msg] $msg [destroy .m1 .m2 .m3]
  1032. } {0 {} {}}
  1033. test menu-5.5 {DestroyMenuInstance - cascades of cloned menus} {
  1034.     catch {destroy .m1}
  1035.     catch {destroy .m2}
  1036.     menu .m1
  1037.     menu .m2
  1038.     .m1 add cascade -menu .m2
  1039.     . configure -menu .m1
  1040.     list [catch {destroy .m2} msg] $msg [.m1 entrycget 1 -menu] [. configure -menu ""] [destroy .m1]
  1041. } {0 {} .m2 {} {}}
  1042. test menu-5.6 {DestroyMenuInstance - cascades of cloned menus} {
  1043.     catch {destroy .m1}
  1044.     catch {destroy .m2}
  1045.     catch {destroy .t2}
  1046.     menu .m1
  1047.     .m1 add cascade -menu .m2
  1048.     menu .m2
  1049.     . configure -menu .m1
  1050.     toplevel .t2
  1051.     wm geometry .t2 +0+0
  1052.     .t2 configure -menu .m1
  1053.     list [catch {destroy .m2} msg] $msg [. configure -menu ""] [destroy .t2 .m1]
  1054. } {0 {} {} {}}
  1055. test menu-5.7 {DestroyMenuInstance - basic clones} {
  1056.     catch {destroy .m1}
  1057.     menu .m1
  1058.     set tearoff [tk::TearOffMenu .m1]
  1059.     list [catch {destroy $tearoff} msg] $msg [destroy .m1]
  1060. } {0 {} {}}
  1061. test menu-5.8 {DestroyMenuInstance - multiple clones} {
  1062.     catch {destroy .m1}
  1063.     menu .m1
  1064.     set tearoff1 [tk::TearOffMenu .m1]
  1065.     set tearoff2 [tk::TearOffMenu .m1]
  1066.     list [catch {destroy $tearoff1} msg] $msg [destroy .m1]
  1067. } {0 {} {}}
  1068. test menu-5.9 {DestroyMenuInstace - master menu} {
  1069.     catch {destroy .m1}
  1070.     menu .m1
  1071.     tk::TearOffMenu .m1
  1072.     list [catch {destroy .m1} msg] $msg
  1073. } {0 {}}
  1074. test menu-5.10 {DestroyMenuInstance - freeing entries} {
  1075.     catch {destroy .m1}
  1076.     menu .m1
  1077.     .m1 add command -label "foo"
  1078.     list [catch {destroy .m1} msg] $msg
  1079. } {0 {}}
  1080. test menu-5.11 {DestroyMenuInstace - no entries} {
  1081.     catch {destroy .m1}
  1082.     menu .m1
  1083.     .m1 configure -tearoff 0
  1084.     list [catch {destroy .m1} msg] $msg
  1085. } {0 {}}
  1086. test menu-5.12 {DestroyMenuInstance - platform data} {
  1087.     catch {destroy .m1}
  1088.     menu .m1
  1089.     list [catch {destroy .m1} msg] $msg
  1090. } {0 {}}
  1091. test menu-5.13 {DestroyMenuInstance - clones when mismatched tearoffs} {
  1092.     catch {destroy .m1}
  1093.     catch {destroy .m2}
  1094.     menu .m1
  1095.     menu .m2
  1096.     .m1 add cascade -menu .m2
  1097.     set tearoff [tk::TearOffMenu .m1 40 40]
  1098.     list [destroy .m2] [destroy .m1]
  1099. } {{} {}}
  1100. test menu-6.1 {TkDestroyMenu} {
  1101.     catch {destroy .m1}
  1102.     menu .m1
  1103.     list [catch {destroy .m1} msg] $msg
  1104. } {0 {}}
  1105. test menu-6.2 {TkDestroyMenu - reentrancy} {
  1106.     catch {destroy .m1}
  1107.     catch {destroy .m2}
  1108.     menu .m1
  1109.     bind .m1 <Destroy> {destroy .m1}
  1110.     menu .m2
  1111.     bind .m2 <Destroy> {destroy .m2}
  1112.     list [catch {destroy .m1} msg] $msg [destroy .m2]
  1113. } {0 {} {}}
  1114. test menu-6.3 {TkDestroyMenu - reentrancy} {
  1115.     catch {destroy .m1}
  1116.     catch {destroy .m2}
  1117.     catch {destroy .m3}
  1118.     menu .m1
  1119.     bind .m1 <Destroy> {destroy .m2}
  1120.     .m1 clone .m2
  1121.     .m1 clone .m3
  1122.     list [catch {destroy .m1} msg] $msg [winfo exists .m2]
  1123. } {0 {} 0}
  1124. test menu-6.4 {TkDestroyMenu - reentrancy - clones} {
  1125.     catch {destroy .m1}
  1126.     catch {destroy .m2}
  1127.     menu .m1
  1128.     .m1 clone .m2
  1129.     .m1 clone .m1.m3
  1130.     list [catch {destroy .m1} msg] $msg
  1131. } {0 {}}
  1132. test menu-6.5 {TkDestroyMenu} {
  1133.     catch {destroy .m1}
  1134.     catch {destroy .m2}
  1135.     menu .m1
  1136.     .m1 clone .m2
  1137.     destroy .m1
  1138.     winfo exists .m2
  1139. } {0}
  1140. test menu-6.6 {TkDestroyMenu} {
  1141.     catch {destroy .m1}
  1142.     catch {destroy .m2}
  1143.     menu .m1
  1144.     .m1 clone .m2 tearoff
  1145.     list [catch {destroy .m1} msg] $msg
  1146. } {0 {}}
  1147. test menu-6.7 {TkDestroyMenu} {
  1148.     catch {destroy .m1}
  1149.     catch {destroy .m2}
  1150.     menu .m1
  1151.     .m1 clone .m2
  1152.     destroy .m2
  1153.     list [catch {destroy .m1} msg] $msg
  1154. } {0 {}}
  1155. test menu-6.8 {TkDestroyMenu} {
  1156.     catch {destroy .m1}
  1157.     catch {destroy .m2}
  1158.     catch {destroy .m3}
  1159.     menu .m1
  1160.     .m1 clone .m2
  1161.     .m1 clone .m3
  1162.     destroy .m1
  1163.     list [winfo exists .m2] [winfo exists .m3]
  1164. } {0 0}
  1165. test menu-6.9 {TkDestroyMenu} {
  1166.     catch {destroy .m1}
  1167.     catch {destroy .m2}
  1168.     catch {destroy .m3}
  1169.     menu .m1
  1170.     .m1 clone .m2
  1171.     .m1 clone .m3
  1172.     list [catch {destroy .m2} msg] $msg [catch {destroy .m3} msg2] $msg2 [catch {destroy .m1} msg3] $msg3
  1173. } {0 {} 0 {} 0 {}}
  1174. test menu-6.10 {TkDestroyMenu} {
  1175.     catch {destroy .m1}
  1176.     catch {destroy .m2}
  1177.     catch {destroy .m3}
  1178.     menu .m1
  1179.     .m1 clone .m2
  1180.     .m1 clone .m3
  1181.     list [catch {destroy .m3} msg] $msg [catch {destroy .m1} msg2] $msg2
  1182. } {0 {} 0 {}}
  1183. test menu-6.11 {TkDestroyMenu} {
  1184.     catch {destroy .m1}
  1185.     catch {destroy .m2}
  1186.     catch {destroy .m3}
  1187.     catch {destroy .m4}
  1188.     menu .m1
  1189.     .m1 clone .m2
  1190.     .m1 clone .m3
  1191.     .m1 clone .m4
  1192.     list [catch {destroy .m2} msg1] $msg1 [catch {destroy .m1} msg2] $msg2
  1193. } {0 {} 0 {}}
  1194. test menu-6.12 {TkDestroyMenu} {
  1195.     catch {destroy .m1}
  1196.     catch {destroy .m2}
  1197.     catch {destroy .m3}
  1198.     catch {destroy .m4}
  1199.     menu .m1
  1200.     .m1 clone .m2
  1201.     .m1 clone .m3
  1202.     .m1 clone .m4
  1203.     list [catch {destroy .m3} msg1] $msg1 [catch {destroy .m1} msg2] $msg2
  1204. } {0 {} 0 {}}
  1205. test menu-6.13 {TkDestroyMenu} {
  1206.     catch {destroy .m1}
  1207.     catch {destroy .m2}
  1208.     catch {destroy .m3}
  1209.     catch {destroy .m4}
  1210.     menu .m1
  1211.     .m1 clone .m2
  1212.     .m1 clone .m3
  1213.     .m1 clone .m4
  1214.     list [catch {destroy .m4} msg1] $msg1 [catch {destroy .m1} msg2] $msg2
  1215. } {0 {} 0 {}}
  1216. test menu-6.14 {TkDestroyMenu} {
  1217.     catch {destroy .m1}
  1218.     menu .m1
  1219.     . configure -menu .m1
  1220.     list [catch {destroy .m1} msg] $msg [. configure -menu ""]
  1221. } {0 {} {}}
  1222. test menu-6.15 {TkDestroyMenu} {
  1223.     catch {destroy .m1}
  1224.     catch {destroy .t2}
  1225.     menu .m1
  1226.     toplevel .t2
  1227.     wm geometry .t2 +0+0
  1228.     . configure -menu .m1
  1229.     .t2 configure -menu .m1
  1230.     list [catch {destroy .m1} msg] $msg [destroy .t2] [. configure -menu ""]
  1231. } {0 {} {} {}}
  1232. test menu-6.16 {TkDestroyMenu} {
  1233.     catch {destroy .m1}
  1234.     catch {destroy .t2}
  1235.     catch {destroy .t3}
  1236.     menu .m1
  1237.     toplevel .t2
  1238.     wm geometry .t2 +0+0
  1239.     toplevel .t3
  1240.     wm geometry .t3 +0+0
  1241.     . configure -menu .m1
  1242.     .t2 configure -menu .m1
  1243.     .t3 configure -menu .m1
  1244.     list [catch {destroy .m1} msg] $msg [destroy .t2] [destroy .t3] [. configure -menu ""]
  1245. } {0 {} {} {} {}}
  1246. test menu-7.1 {UnhookCascadeEntry} {
  1247.     catch {destroy .m1}
  1248.     menu .m1
  1249.     .m1 add command -label "test"
  1250.     list [catch {destroy .m1} msg] $msg
  1251. } {0 {}}
  1252. test menu-7.2 {UnhookCascadeEntry} {
  1253.     catch {destroy .m1}
  1254.     menu .m1
  1255.     .m1 add cascade -menu .m2
  1256.     list [catch {destroy .m1} msg] $msg
  1257. } {0 {}}
  1258. test menu-7.3 {UnhookCascadeEntry} {
  1259.     catch {destroy .m1}
  1260.     catch {destroy .m2}
  1261.     menu .m1
  1262.     menu .m2
  1263.     .m2 add cascade -menu .cascade
  1264.     .m1 add cascade -menu .cascade
  1265.     list [catch {destroy .m1} msg] $msg [destroy .m2]
  1266. } {0 {} {}}
  1267. test menu-7.4 {UnhookCascadeEntry} {
  1268.     catch {destroy .m1}
  1269.     catch {destroy .m2}
  1270.     menu .m1
  1271.     menu .m2
  1272.     .m1 add cascade -menu .cascade
  1273.     .m2 add cascade -menu .cascade
  1274.     list [catch {destroy .m1} msg] $msg [destroy .m2]
  1275. } {0 {} {}}
  1276. test menu-7.5 {UnhookCascadeEntry} {
  1277.     catch {destroy .m1}
  1278.     catch {destroy .m2}
  1279.     catch {destroy .m3}
  1280.     menu .m1
  1281.     menu .m2
  1282.     menu .m3
  1283.     .m1 add cascade -menu .cascade
  1284.     .m2 add cascade -menu .cascade
  1285.     .m3 add cascade -menu .cascade
  1286.     list [catch {destroy .m1} msg] $msg [destroy .m2 .m3]
  1287. } {0 {} {}}
  1288. test menu-7.6 {UnhookCascadeEntry} {
  1289.     catch {destroy .m1}
  1290.     catch {destroy .m2}
  1291.     catch {destroy .m3}
  1292.     menu .m1
  1293.     menu .m2
  1294.     menu .m3
  1295.     .m1 add cascade -menu .cascade
  1296.     .m2 add cascade -menu .cascade
  1297.     .m3 add cascade -menu .cascade
  1298.     list [catch {destroy .m2} msg] $msg [destroy .m1 .m3]
  1299. } {0 {} {}}
  1300. test menu-7.7 {UnhookCascadeEntry} {
  1301.     catch {destroy .m1}
  1302.     catch {destroy .m2}
  1303.     catch {destroy .m3}
  1304.     menu .m1
  1305.     menu .m2
  1306.     menu .m3
  1307.     .m1 add cascade -menu .cascade
  1308.     .m2 add cascade -menu .cascade
  1309.     .m3 add cascade -menu .cascade
  1310.     list [catch {destroy .m3} msg] $msg [destroy .m1 .m2]
  1311. } {0 {} {}}
  1312. test menu-7.8 {UnhookCascadeEntry} {
  1313.     catch {destroy .m1}
  1314.     catch {destroy .m2}
  1315.     menu .m1
  1316.     menu .m2
  1317.     .m1 add cascade -menu .m2
  1318.     list [catch {destroy .m1} msg] $msg [destroy .m2]
  1319. } {0 {} {}}
  1320. test menu-7.9 {UnhookCascadeEntry} {
  1321.     catch {destroy .m1}
  1322.     catch {destroy .m2}
  1323.     menu .m1
  1324.     menu .m2
  1325.     .m1 add cascade -menu .m2
  1326.     destroy .m1
  1327.     list [catch {destroy .m2} msg] $msg
  1328. } {0 {}}
  1329. test menu-8.1 {DestroyMenuEntry} {
  1330.     catch {destroy .m1}
  1331.     catch {destroy .m2}
  1332.     menu .m1
  1333.     menu .m2
  1334.     .m1 add cascade -menu .m2
  1335.     list [catch {.m1 delete 1} msg] $msg [destroy .m1 .m2]
  1336. } {0 {} {}}
  1337. test menu-8.2 {DestroyMenuEntry} {
  1338.     catch {image delete image1a}
  1339.     catch {destroy .m1}
  1340.     image create photo image1a -file [file join $tk_library demos images earth.gif]
  1341.     menu .m1
  1342.     .m1 add command -image image1a
  1343.     list [catch {.m1 delete 1} msg] $msg [destroy .m1] [image delete image1a]
  1344. } {0 {} {} {}}
  1345. test menu-8.3 {DestroyMenuEntry} testImageType {
  1346.     catch {eval image delete [image names]}
  1347.     catch {destroy .m1}
  1348.     image create test image1
  1349.     image create test image2
  1350.     menu .m1
  1351.     .m1 add checkbutton -image image1 -selectimage image2
  1352.     .m1 invoke 1
  1353.     list [catch {.m1 delete 1} msg] $msg [destroy .m1] [eval image delete [image names]]
  1354. } {0 {} {} {}}
  1355. test menu-8.4 {DestroyMenuEntry} {
  1356.     catch {destroy .m1}
  1357.     menu .m1
  1358.     .m1 add checkbutton -variable foo
  1359.     list [catch {.m1 delete 1} msg] $msg [destroy .m1]
  1360. } {0 {} {}} 
  1361. test menu-8.5 {DestroyMenuEntry} {
  1362.     catch {destroy .m1}
  1363.     menu .m1
  1364.     .m1 add command -label "test"
  1365.     list [catch {.m1 delete 1} msg] $msg [destroy .m1]
  1366. } {0 {} {}}
  1367. test menu-8.6 {DestroyMenuEntry} {
  1368.     catch {destroy .m1}
  1369.     menu .m1
  1370.     .m1 add command -label "one"
  1371.     .m1 add command -label "two"
  1372.     list [catch {.m1 delete 1} msg] $msg [.m1 entrycget 1 -label] [destroy .m1]
  1373. } {0 {} two {}}
  1374. test menu-8.7 {DestroyMenuEntry} {
  1375.     catch {destroy .m1}
  1376.     catch {destroy .m2}
  1377.     menu .m1
  1378.     .m1 add command -label "one"
  1379.     .m1 clone .m2 tearoff
  1380.     list [catch {.m2 delete 0} msg] $msg [destroy .m1]
  1381. } {0 {} {}}
  1382. # test menu-9 - Can only change when fonts change on system, which cannot
  1383. # be done from tcl.
  1384. test menu-9.1 {ConfigureMenu} {
  1385.     catch {destroy .m1}
  1386.     menu .m1
  1387.     list [catch {.m1 configure -postcommand "beep"} msg] $msg [.m1 cget -postcommand] [destroy .m1]    
  1388. } {0 {} beep {}}
  1389. test menu-9.2 {ConfigureMenu} {
  1390.     catch {destroy .m1}
  1391.     menu .m1
  1392.     .m1 add command -label "test"
  1393.     list [catch {.m1 configure -tearoff 0} msg] $msg [.m1 entrycget 1 -label] [destroy .m1]
  1394. } {0 {} test {}}
  1395. test menu-9.3 {ConfigureMenu} {
  1396.     catch {destroy .m1}
  1397.     menu .m1
  1398.     list [catch {.m1 configure -postcommand "beep"} msg] $msg [.m1 cget -postcommand] [destroy .m1]
  1399. } {0 {} beep {}}
  1400. test menu-9.4 {ConfigureMenu} {
  1401.     catch {destroy .m1}
  1402.     menu .m1
  1403.     .m1 add command -label "test"
  1404.     list [catch {.m1 configure -fg red} msg] $msg [destroy .m1]
  1405. } {0 {} {}}
  1406. test menu-9.5 {ConfigureMenu} {
  1407.     catch {destroy .m1}
  1408.     menu .m1
  1409.     .m1 add command -label "test"
  1410.     .m1 add command -label "two"
  1411.     list [catch {.m1 configure -fg red} msg] $msg [destroy .m1]
  1412. } {0 {} {}}
  1413. test menu-9.6 {ConfigureMenu} {
  1414.     catch {destroy .m1}
  1415.     menu .m1
  1416.     .m1 add command -label "test"
  1417.     .m1 add command -label "two"
  1418.     .m1 add command -label "three"
  1419.     list [catch {.m1 configure -fg red} msg] $msg [destroy .m1]
  1420. } {0 {} {}}
  1421. test menu-9.7 {ConfigureMenu} {
  1422.     catch {destroy .m1}
  1423.     catch {destroy .m2}
  1424.     menu .m1
  1425.     .m1 clone .m2 tearoff
  1426.     list [catch {.m1 configure -fg red} msg] $msg [.m2 cget -fg] [destroy .m1]
  1427. } {0 {} red {}}
  1428. test menu-9.8 {ConfigureMenu} {
  1429.     catch {destroy .m1}
  1430.     catch {destroy .m2}
  1431.     menu .m1
  1432.     .m1 clone .m2 tearoff
  1433.     list [catch {.m2 configure -fg red} msg] $msg [.m1 cget -fg] [destroy .m1]
  1434. } {0 {} red {}}
  1435. test menu-9.9 {ConfigureMenu} {
  1436.     catch {destroy .m1}
  1437.     menu .m1
  1438.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""] [destroy .m1]
  1439. } {0 {} {} {}}
  1440. test menu-10.1 {PostProcessEntry: array variable} {
  1441.     catch {destroy .m1}
  1442.     catch {unset foo}
  1443.     menu .m1
  1444.     set foo(1) on
  1445.     .m1 add checkbutton -variable foo(1) -onvalue on -offvalue off -label "Nonsense"
  1446.     list [catch {set foo(1)} msg] $msg [destroy .m1]
  1447. } {0 on {}}
  1448. test menu-10.2 {PostProcessEntry: array variable} {
  1449.     catch {destroy .m1}
  1450.     catch {unset foo}
  1451.     menu .m1
  1452.     .m1 add checkbutton -variable foo(1) -onvalue on -offvalue off -label "Nonsense"
  1453.     list [catch {set foo(1)} msg] $msg [destroy .m1]
  1454. } {0 off {}}
  1455. test menu-11.1 {ConfigureMenuEntry} {
  1456.     catch {destroy .m1}
  1457.     catch {unset foo}
  1458.     menu .m1
  1459.     .m1 add checkbutton -variable foo -onvalue on -offvalue off -label "Nonsense"
  1460.     list [catch {.m1 entryconfigure 1 -variable bar} msg] $msg [.m1 entrycget 1 -variable] [destroy .m1]
  1461. } {0 {} bar {}}
  1462. test menu-11.2 {ConfigureMenuEntry} {
  1463.     catch {destroy .m1}
  1464.     menu .m1
  1465.     .m1 add command -label "test"
  1466.     list [catch {.m1 entryconfigure 1 -label ""} msg] $msg [.m1 entrycget 1 -label] [destroy .m1]
  1467. } {0 {} {} {}}
  1468. test menu-11.3 {ConfigureMenuEntry} {
  1469.     catch {destroy .m1}
  1470.     menu .m1
  1471.     .m1 add command
  1472.     list [catch {.m1 entryconfigure 1 -label "test"} cmd] $cmd [.m1 entrycget 1 -label] [destroy .m1]
  1473. } {0 {} test {}}
  1474. test menu-11.4 {ConfigureMenuEntry} {
  1475.     catch {destroy .m1}
  1476.     menu .m1 
  1477.     .m1 add command
  1478.     list [catch {.m1 entryconfigure 1 -accel "S"} msg] $msg [.m1 entrycget 1 -accel] [destroy .m1]
  1479. } {0 {} S {}}
  1480. test menu-11.5 {ConfigureMenuEntry} {
  1481.     catch {destroy .m1}
  1482.     menu .m1
  1483.     .m1 add command
  1484.     list [catch {.m1 entryconfigure 1 -label "test"} msg] $msg [.m1 entrycget 1 -label] [destroy .m1]
  1485. } {0 {} test {}}
  1486. test menu-11.6 {ConfigureMenuEntry} {
  1487.     catch {destroy .m1}
  1488.     menu .m1
  1489.     .m1 add command
  1490.     list [catch {.m1 entryconfigure 1 -label "test"} msg] $msg [destroy .m1]
  1491. } {0 {} {}}
  1492. test menu-11.7 {ConfigureMenuEntry} {
  1493.     catch {destroy .m1}
  1494.     catch {destroy .m2}
  1495.     menu .m2
  1496.     menu .m1
  1497.     .m1 add cascade
  1498.     list [catch {.m1 entryconfigure 1 -label "test" -menu .m2} msg] $msg [destroy .m1 .m2]
  1499. } {0 {} {}}
  1500. test menu-11.8 {ConfigureMenuEntry} {
  1501.     catch {destroy .m1}
  1502.     menu .m1
  1503.     .m1 add cascade
  1504.     list [catch {.m1 entryconfigure 1 -label "test" -menu .m2} msg] $msg [destroy .m1]
  1505. } {0 {} {}}
  1506. test menu-11.9 {ConfigureMenuEntry} {
  1507.     catch {destroy .m1}
  1508.     menu .m1
  1509.     .m1 add cascade -menu .m3
  1510.     list [catch {.m1 entryconfigure 1 -label "test" -menu .m2} msg] $msg [destroy .m1]
  1511. } {0 {} {}}
  1512. test menu-11.10 {ConfigureMenuEntry} {
  1513.     catch {destroy .m1}
  1514.     menu .m1
  1515.     .m1 add cascade
  1516.     list [catch {.m1 entryconfigure 1 -label "test" -menu .m2} msg] $msg [destroy .m1]
  1517. } {0 {} {}}
  1518. test menu-11.11 {ConfigureMenuEntry} {
  1519.     catch {destroy .m1}
  1520.     menu .m1
  1521.     .m1 add cascade -menu .m2
  1522.     list [catch {.m1 entryconfigure 1 -label "test" -menu .m2} msg] $msg [destroy .m1]
  1523. } {0 {} {}}
  1524. test menu-11.12 {ConfigureMenuEntry} {
  1525.     catch {destroy .m1}
  1526.     catch {destroy .m2}
  1527.     catch {destroy .m3}
  1528.     catch {destroy .m4}
  1529.     catch {destroy .m5}
  1530.     menu .m1
  1531.     menu .m2 
  1532.     .m2 add cascade -menu .m1
  1533.     menu .m3 
  1534.     .m3 add cascade -menu .m1
  1535.     menu .m4 
  1536.     .m4 add cascade -menu .m1
  1537.     menu .m5 
  1538.     .m5 add cascade
  1539.     list [catch {.m5 entryconfigure 1 -label "test" -menu .m1} msg] $msg [destroy .m1 .m2 .m3 .m4 .m5]
  1540. } {0 {} {}}
  1541. test menu-11.13 {ConfigureMenuEntry} {
  1542.     catch {destroy .m1}
  1543.     catch {destroy .m2}
  1544.     catch {destroy .m3}
  1545.     catch {destroy .m4}
  1546.     menu .m1
  1547.     menu .m2 
  1548.     .m2 add cascade -menu .m1
  1549.     menu .m3 
  1550.     .m3 add cascade -menu .m1
  1551.     menu .m4 
  1552.     .m4 add cascade -menu .m1
  1553.     list [catch {.m3 entryconfigure 1 -label "test" -menu .m1} msg] $msg [destroy .m1 .m2 .m3 .m4]
  1554. } {0 {} {}}
  1555. test menu-11.14 {ConfigureMenuEntry} {
  1556.     catch {destroy .m1}
  1557.     menu .m1
  1558.     .m1 add checkbutton
  1559.     list [catch {.m1 entryconfigure 1 -variable "test"} msg] $msg [.m1 entrycget 1 -variable] [destroy .m1]
  1560. } {0 {} test {}}
  1561. test menu-11.15 {ConfigureMenuEntry} {
  1562.     catch {destroy .m1}
  1563.     menu .m1
  1564.     list [catch {.m1 add checkbutton -label "test"} msg] $msg [.m1 entrycget 1 -variable] [destroy .m1]
  1565. } {0 {} test {}}
  1566. test menu-11.16 {ConfigureMenuEntry} {
  1567.     catch {destroy .m1}
  1568.     menu .m1
  1569.     list [catch {.m1 add radiobutton -label "test"} msg] $msg [destroy .m1]
  1570. } {0 {} {}}
  1571. test menu-11.17 {ConfigureMenuEntry} {
  1572.     catch {destroy .m1}
  1573.     menu .m1
  1574.     .m1 add checkbutton
  1575.     list [catch {.m1 entryconfigure 1 -onvalue "test"} msg] $msg [.m1 entrycget 1 -onvalue] [destroy .m1]
  1576. } {0 {} test {}}
  1577. test menu-11.18 {ConfigureMenuEntry} testImageType {
  1578.     catch {destroy .m1}
  1579.     catch {image delete image1}
  1580.     menu .m1
  1581.     .m1 add command
  1582.     image create test image1
  1583.     list [catch {.m1 entryconfigure 1 -image image1} msg] $msg [destroy .m1] [image delete image1]
  1584. } {0 {} {} {}}
  1585. test menu-11.19 {ConfigureMenuEntry} testImageType {
  1586.     catch {destroy .m1}
  1587.     catch {image delete image1}
  1588.     catch {image delete image2}
  1589.     image create test image1
  1590.     image create photo image2 -file [file join $tk_library demos images earth.gif]
  1591.     menu .m1
  1592.     .m1 add command -image image1
  1593.     list [catch {.m1 entryconfigure 1 -image image2} msg] $msg [destroy .m1] [image delete image1] [image delete image2]
  1594. } {0 {} {} {} {}}
  1595. test menu-11.20 {ConfigureMenuEntry} testImageType {
  1596.     catch {destroy .m1}
  1597.     catch {image delete image1}
  1598.     catch {image delete image2}
  1599.     image create photo image1 -file [file join $tk_library demos images earth.gif]
  1600.     image create test image2
  1601.     menu .m1
  1602.     .m1 add checkbutton -image image1
  1603.     list [catch {.m1 entryconfigure 1 -selectimage image2} msg] $msg [destroy .m1] [image delete image1] [image delete image2]
  1604. } {0 {} {} {} {}}
  1605. test menu-11.21 {ConfigureMenuEntry} testImageType {
  1606.     catch {destroy .m1}
  1607.     catch {image delete image1}
  1608.     catch {image delete image2}
  1609.     catch {image delete image3}
  1610.     image create photo image1 -file [file join $tk_library demos images earth.gif]
  1611.     image create test image2
  1612.     image create test image3
  1613.     menu .m1
  1614.     .m1 add checkbutton -image image1 -selectimage image2
  1615.     list [catch {.m1 entryconfigure 1 -selectimage image3} msg] $msg [destroy .m1] [image delete image1] [image delete image2] [image delete image3]
  1616. } {0 {} {} {} {} {}}
  1617. test menu-12.1 {ConfigureMenuCloneEntries} {
  1618.     catch {destroy .m1}
  1619.     catch {destroy .m2}
  1620.     catch {destroy .m3}
  1621.     menu .m1
  1622.     .m1 clone .m2
  1623.     .m2 configure -tearoff 0
  1624.     .m1 clone .m3
  1625.     .m1 add command -label "test"
  1626.     .m1 add command -label "test2"
  1627.     list [list [catch {.m1 entryconfigure 1 -gork "foo"} msg] $msg] [destroy .m1]
  1628. } {{1 {unknown option "-gork"}} {}}
  1629. test menu-12.2 {ConfigureMenuCloneEntries} {
  1630.     catch {destroy .m1}
  1631.     catch {destroy .m2}
  1632.     catch {destroy .m3}
  1633.     catch {destroy .m4}
  1634.     menu .m1
  1635.     .m1 clone .m2
  1636.     menu .m3
  1637.     .m1 add cascade -menu .m3
  1638.     menu .m4
  1639.     list [catch {.m1 entryconfigure 1 -menu .m4} msg] $msg [destroy .m1] [destroy .m3] [destroy .m4]
  1640. } {0 {} {} {} {}}
  1641. test menu-12.3 {ConfigureMenuCloneEntries} {
  1642.     catch {destroy .m1}
  1643.     catch {destroy .m2}
  1644.     menu .m1
  1645.     .m1 clone .m2
  1646.     .m1 add cascade -label dummy
  1647.     list [catch {.m1 entryconfigure dummy -menu .m3} msg] $msg [destroy .m1]
  1648. } {0 {} {}}
  1649. test menu-12.4 {ConfigureMenuCloneEntries} {
  1650.      catch {destroy .m1}
  1651.      catch {destroy .m2}
  1652.      menu .m1
  1653.      .m1 add cascade -label File -menu .m1.foo
  1654.      menu .m1.foo
  1655.      .m1.foo add command -label bar
  1656.      .m1 clone .m2
  1657.      list [catch {.m1 entryconfigure File -state disabled} msg1] $msg1 [destroy .m1]
  1658. } {0 {} {}}
  1659. test menu-13.1 {TkGetMenuIndex} {
  1660.     catch {destroy .m1}
  1661.     menu .m1
  1662.     .m1 add command -label "active"
  1663.     .m1 add command -label "test2"
  1664.     .m1 add command -label "test3"
  1665.     .m1 activate 2
  1666.     list [catch {.m1 entrycget active -label} msg] $msg [destroy .m1]
  1667. } {0 test2 {}}
  1668. test menu-13.2 {TkGetMenuIndex} {
  1669.     catch {destroy .m1}
  1670.     menu .m1
  1671.     .m1 add command -label "last"
  1672.     .m1 add command -label "test2"
  1673.     .m1 add command -label "test3"
  1674.     .m1 activate 2
  1675.     list [catch {.m1 entrycget last -label} msg] $msg [destroy .m1]
  1676. } {0 test3 {}}
  1677. test menu-13.3 {TkGetMenuIndex} {
  1678.     catch {destroy .m1}
  1679.     menu .m1
  1680.     .m1 add command -label "last"
  1681.     .m1 add command -label "test2"
  1682.     .m1 add command -label "test3"
  1683.     .m1 activate 2
  1684.     list [catch {.m1 entrycget end -label} msg] $msg [destroy .m1]
  1685. } {0 test3 {}}
  1686. test menu-13.4 {TkGetMenuIndex} {
  1687.     catch {destroy .m1}
  1688.     menu .m1
  1689.     .m1 add command -label "test"
  1690.     list [catch {.m1 insert last command -label "test2"} msg] $msg [.m1 entrycget last -label] [destroy .m1]
  1691. } {0 {} test2 {}}
  1692. test menu-13.5 {TkGetMenuIndex} {
  1693.     catch {destroy .m1}
  1694.     menu .m1
  1695.     .m1 add command -label "test"
  1696.     list [catch {.m1 insert end command -label "test2"} msg] $msg [.m1 entrycget end -label] [destroy .m1]
  1697. } {0 {} test2 {}}
  1698. test menu-13.6 {TkGetMenuIndex} {
  1699.     catch {destroy .m1}
  1700.     menu .m1
  1701.     .m1 add command -label "active"
  1702.     .m1 add command -label "test2"
  1703.     .m1 add command -label "test3"
  1704.     .m1 activate 2
  1705.     list [catch {.m1 entrycget none -label} msg] $msg [destroy .m1]
  1706. } {0 {} {}}
  1707. #test menu-13.7 - Need to add @test here.
  1708. test menu-13.7 {TkGetMenuIndex} {
  1709.     catch {destroy .m1}
  1710.     menu .m1
  1711.     .m1 add command -label "active"
  1712.     .m1 add command -label "test2"
  1713.     .m1 add command -label "test3"
  1714.     list [catch {.m1 entrycget 1 -label} msg] $msg [destroy .m1]
  1715. } {0 active {}}
  1716. test menu-13.8 {TkGetMenuIndex} {
  1717.     catch {destroy .m1}
  1718.     menu .m1
  1719.     .m1 add command -label "active"
  1720.     list [catch {.m1 entrycget -1 -label} msg] $msg [destroy .m1]
  1721. } {1 {bad menu entry index "-1"} {}}
  1722. test menu-13.9 {TkGetMenuIndex} {
  1723.     catch {destroy .m1}
  1724.     menu .m1
  1725.     .m1 add command -label "test"
  1726.     .m1 add command -label "test2"
  1727.     list [catch {.m1 entrycget 999 -label} msg] $msg [destroy .m1]
  1728. } {0 test2 {}}
  1729. test menu-13.10 {TkGetMenuIndex} {
  1730.     catch {destroy .m1}
  1731.     menu .m1
  1732.     .m1 insert 999 command -label "test"
  1733.     list [catch {.m1 entrycget 1 -label} msg] $msg [destroy .m1]
  1734. } {0 test {}}
  1735. test menu-13.11 {TkGetMenuIndex} {
  1736.     catch {destroy .m1}
  1737.     menu .m1
  1738.     .m1 add command -label "1test"
  1739.     list [catch {.m1 entrycget 1test -label} msg] $msg [destroy .m1]
  1740. } {0 1test {}}
  1741. test menu-13.12 {TkGetMenuIndex} {
  1742.     catch {destroy .m1}
  1743.     menu .m1
  1744.     .m1 add command -label "test"
  1745.     .m1 add command -label "test2" -command "beep"
  1746.     .m1 add command -label "test3"
  1747.     list [catch {.m1 entrycget test2 -command} msg] $msg [destroy .m1]
  1748. } {0 beep {}}
  1749. test menu-14.1 {MenuCmdDeletedProc} {
  1750.     catch {destroy .m1}
  1751.     menu .m1
  1752.     list [catch {destroy .m1} msg] $msg
  1753. } {0 {}}
  1754. test menu-14.2 {MenuCmdDeletedProc} {
  1755.     catch {destroy .m1}
  1756.     menu .m1
  1757.     .m1 clone .m2
  1758.     list [catch {destroy .m1} msg] $msg
  1759. } {0 {}}
  1760. test menu-15.1 {MenuNewEntry} {
  1761.     catch {destroy .m1}
  1762.     menu .m1
  1763.     list [catch {.m1 add command -label "test"} msg] $msg [destroy .m1]
  1764. } {0 {} {}}
  1765. test menu-15.2 {MenuNewEntry} {
  1766.     catch {destroy .m1}
  1767.     menu .m1
  1768.     .m1 add command -label "test"
  1769.     .m1 add command -label "test3"
  1770.     list [catch {.m1 insert 2 command -label "test2"} msg] $msg [destroy .m1]
  1771. } {0 {} {}}
  1772. test menu-15.3 {MenuNewEntry} {
  1773.     catch {destroy .m1}
  1774.     menu .m1
  1775.     .m1 add command -label "test"
  1776.     list [catch {.m1 add command -label "test2"} msg] $msg [destroy .m1]
  1777. } {0 {} {}}
  1778. test menu-15.4 {MenuNewEntry} {
  1779.     catch {destroy .m1}
  1780.     menu .m1
  1781.     list [catch {.m1 add command -label "test"} msg] $msg [destroy .m1]
  1782. } {0 {} {}}
  1783. test menu-16.1 {MenuAddOrInsert} {
  1784.     catch {destroy .m1}
  1785.     menu .m1
  1786.     list [catch {.m1 insert foo command -label "test"} msg] $msg [destroy .m1]
  1787. } {1 {bad menu entry index "foo"} {}}
  1788. test menu-16.2 {MenuAddOrInsert} {
  1789.     catch {destroy .m1}
  1790.     menu .m1
  1791.     .m1 add command -label "test"
  1792.     list [catch {.m1 insert test command -label "foo"} msg] $msg [destroy .m1]
  1793. } {0 {} {}}
  1794. test menu-16.3 {MenuAddOrInsert} {
  1795.     catch {destroy .m1}
  1796.     menu .m1
  1797.     list [catch {.m1 insert -1 command -label "test"} msg] $msg [destroy .m1]
  1798. } {1 {bad menu entry index "-1"} {}}
  1799. test menu-16.4 {MenuAddOrInsert} {
  1800.     catch {destroy .m1}
  1801.     menu .m1
  1802.     .m1 add command -label "test"
  1803.     .m1 insert 0 command -label "test2"
  1804.     list [catch {.m1 entrycget 1 -label} msg] $msg [destroy .m1]
  1805. } {0 test2 {}}
  1806. test menu-16.5 {MenuAddOrInsert} {
  1807.     catch {destroy .m1}
  1808.     menu .m1
  1809.     list [catch {.m1 add cascade} msg] $msg [destroy .m1]
  1810. } {0 {} {}}
  1811. test menu-16.6 {MenuAddOrInsert} {
  1812.     catch {destroy .m1}
  1813.     menu .m1
  1814.     list [catch {.m1 add checkbutton} msg] $msg [destroy .m1]
  1815. } {0 {} {}}
  1816. test menu-16.7 {MenuAddOrInsert} {
  1817.     catch {destroy .m1}
  1818.     menu .m1
  1819.     list [catch {.m1 add command} msg] $msg [destroy .m1]
  1820. } {0 {} {}}
  1821. test menu-16.8 {MenuAddOrInsert} {
  1822.     catch {destroy .m1}
  1823.     menu .m1
  1824.     list [catch {.m1 add radiobutton} msg] $msg [destroy .m1]
  1825. } {0 {} {}}
  1826. test menu-16.9 {MenuAddOrInsert} {
  1827.     catch {destroy .m1}
  1828.     menu .m1
  1829.     list [catch {.m1 add separator} msg] $msg [destroy .m1]
  1830. } {0 {} {}}
  1831. test menu-16.10 {MenuAddOrInsert} {
  1832.     catch {destroy .m1}
  1833.     menu .m1
  1834.     list [catch {.m1 add blork} msg] $msg [destroy .m1]
  1835. } {1 {bad menu entry type "blork": must be cascade, checkbutton, command, radiobutton, or separator} {}}
  1836. test menu-16.11 {MenuAddOrInsert} {
  1837.     catch {destroy .m1}
  1838.     menu .m1
  1839.     list [catch {.m1 add command} msg] $msg [destroy .m1]
  1840. } {0 {} {}}
  1841. test menu-16.12 {MenuAddOrInsert} {
  1842.     catch {destroy .m1}
  1843.     catch {destroy .m2}
  1844.     catch {destroy .m3}
  1845.     menu .m1
  1846.     .m1 clone .m2
  1847.     .m2 clone .m3
  1848.     list [catch {.m2 add command -label "test"} msg1] $msg1 [catch {.m1 entrycget 1 -label} msg2] $msg2 [catch {.m3 entrycget 1 -label} msg3] $msg3 [destroy .m1]
  1849. } {0 {} 0 test 0 test {}}
  1850. test menu-16.13 {MenuAddOrInsert} {
  1851.     catch {destroy .m1}
  1852.     catch {destroy .m2}
  1853.     catch {destroy .m3}
  1854.     menu .m1
  1855.     .m1 clone .m2
  1856.     .m2 clone .m3
  1857.     list [catch {.m3 add command -label "test"} msg1] $msg1 [catch {.m1 entrycget 1 -label} msg2] $msg2 [catch {.m2 entrycget 1 -label} msg3] $msg3 [destroy .m1]
  1858. } {0 {} 0 test 0 test {}}
  1859. test menu-16.14 {MenuAddOrInsert} {
  1860.     catch {destroy .m1}
  1861.     menu .m1
  1862.     list [catch {.m1 add command -blork} msg] $msg [destroy .m1]
  1863. } {1 {unknown option "-blork"} {}}
  1864. test menu-16.15 {MenuAddOrInsert} {
  1865.     catch {destroy .m1}
  1866.     catch {destroy .container}
  1867.     menu .m1
  1868.     .m1 add command -label "File"
  1869.     menu .container
  1870.     . configure -menu .container
  1871.     list [catch {.container add cascade -label "File" -menu .m1} msg] $msg [. configure -menu ""] [destroy .container .m1]
  1872. } {0 {} {} {}}
  1873. test menu-16.16 {MenuAddOrInsert} {
  1874.     catch {destroy .m1}
  1875.     catch {destroy .m2}
  1876.     menu .m1
  1877.     menu .m2
  1878.     set tearoff [tk::TearOffMenu .m2]
  1879.     list [catch {.m2 add cascade -menu .m1} msg] $msg [$tearoff unpost] [catch {destroy .m1} msg2] $msg2 [catch {destroy .m2} msg3] $msg3
  1880. } {0 {} {} 0 {} 0 {}}
  1881. test menu-16.17 {MenuAddOrInsert} {
  1882.     catch {destroy .m1}
  1883.     catch {destroy .container}
  1884.     menu .m1
  1885.     menu .container
  1886.     . configure -menu .container
  1887.     set tearoff [tk::TearOffMenu .container]
  1888.     list [catch {.container add cascade -label "File" -menu .m1} msg] $msg [. configure -menu ""] [destroy .m1 .container]
  1889. } {0 {} {} {}}
  1890. test menu-16.18 {MenuAddOrInsert} {
  1891.     catch {destroy .m1}
  1892.     catch {destroy .container}
  1893.     menu .m1
  1894.     menu .container
  1895.     .container add cascade -menu .m1
  1896.     . configure -menu .container
  1897.     list [catch {.container add cascade -label "File" -menu .m1} msg] $msg [. configure -menu ""] [destroy .m1 .container]
  1898. } {0 {} {} {}}
  1899. test menu-16.19 {MenuAddOrInsert - Insert a cascade deep into the tree} {
  1900.     catch {destroy .menubar}
  1901.     menu .menubar
  1902.     menu .menubar.test -tearoff 0
  1903.     .menubar add cascade -label Test -underline 0 -menu .menubar.test
  1904.     menu .menubar.test.cascade -tearoff 0
  1905.     .menubar.test.cascade add command -label SubItem -command "puts SubItemSelected"
  1906.     . configure -menu .menubar
  1907.     list [catch {.menubar.test add cascade -label SubMenu 
  1908. -menu .menubar.test.cascade} msg] 
  1909. [info commands .#menubar.#menubar#test.#menubar#test#cascade] 
  1910. [. configure -menu ""] [destroy .menubar]
  1911. } {0 .#menubar.#menubar#test.#menubar#test#cascade {} {}}
  1912. test menu-17.1 {MenuVarProc} {
  1913.     catch {destroy .m1}
  1914.     catch {unset foo}
  1915.     menu .m1
  1916.     set foo "hello"
  1917.     list [catch {.m1 add checkbutton -variable foo -onvalue hello -offvalue goodbye} msg] $msg [catch {unset foo} msg2] $msg2 [destroy .m1]
  1918. } {0 {} 0 {} {}}
  1919. # menu-17.2 - Don't know how to generate the flags in the if
  1920. test menu-17.2 {MenuVarProc} {
  1921.     catch {destroy .m1}
  1922.     catch {unset foo}
  1923.     menu .m1
  1924.     list [catch {.m1 add checkbutton -variable foo -onvalue hello -offvalue goodbye} msg] $msg [set foo ""] [destroy .m1]
  1925. } {0 {} {} {}}
  1926. test menu-17.3 {MenuVarProc} {
  1927.     catch {destroy .m1}
  1928.     catch {unset foo}
  1929.     menu .m1
  1930.     set foo "hello"
  1931.     list [catch {.m1 add checkbutton -variable foo -onvalue hello -offvalue goodbye} msg] $msg [set foo "hello"] [destroy .m1] [catch {unset foo} msg2] $msg2
  1932. } {0 {} hello {} 0 {}}
  1933. test menu-17.4 {MenuVarProc} {
  1934.     catch {destroy .m1}
  1935.     menu .m1
  1936.     set foo "goodbye"
  1937.     list [catch {.m1 add checkbutton -variable foo -onvalue hello -offvalue goodbye} msg] $msg [set foo "hello"] [destroy .m1] [catch {unset foo} msg2] $msg2
  1938. } {0 {} hello {} 0 {}}
  1939. test menu-17.5 {MenuVarProc} {
  1940.     catch {destroy .m1}
  1941.     menu .m1
  1942.     set foo "hello"
  1943.     list [catch {.m1 add checkbutton -variable foo -onvalue hello -offvalue goodbye} msg] $msg [set foo "goodbye"] [destroy .m1] [catch {unset foo} msg2] $msg2
  1944. } {0 {} goodbye {} 0 {}}
  1945. test menu-18.1 {TkActivateMenuEntry} {
  1946.     catch {destroy .m1}
  1947.     menu .m1
  1948.     .m1 add command -label "test"
  1949.     list [catch {.m1 activate 1} msg] $msg [destroy .m1]
  1950. } {0 {} {}}
  1951. test menu-18.2 {TkActivateMenuEntry} {
  1952.     catch {destroy .m1}
  1953.     menu .m1
  1954.     .m1 add command -label "test"
  1955.     list [catch {.m1 activate 0} msg] $msg [destroy .m1]
  1956. } {0 {} {}}
  1957. test menu-18.3 {TkActivateMenuEntry} {
  1958.     catch {destroy .m1}
  1959.     menu .m1
  1960.     .m1 add command -label "test"
  1961.     .m1 add command -label "test2"
  1962.     .m1 activate 1
  1963.     list [catch {.m1 activate 2} msg] $msg [destroy .m1]
  1964. } {0 {} {}}
  1965. test menu-18.4 {TkActivateMenuEntry} {
  1966.     catch {destroy .m1}
  1967.     menu .m1
  1968.     .m1 add command -label "test"
  1969.     .m1 add command -label "test2"
  1970.     .m1 activate 1
  1971.     list [catch {.m1 activate 1} msg] $msg [destroy .m1]
  1972. } {0 {} {}}
  1973. test menu-19.1 {TkPostCommand} {nonUnixUserInteraction } {
  1974.     catch {destroy .m1}
  1975.     menu .m1 -postcommand "set menu_test menu-19.1"
  1976.     .m1 add command -label "menu-19.1 - hit Escape"
  1977.     list [catch {.m1 post 40 40} msg] $msg [.m1 unpost] [set menu_test] [destroy .m1]
  1978. } {0 menu-19.1 {} menu-19.1 {}}
  1979. test menu-19.2 {TkPostCommand} {nonUnixUserInteraction } {
  1980.     catch {destroy .m1}
  1981.     menu .m1
  1982.     .m1 add command -label "menu-19.2 - hit Escape"
  1983.     list [catch {.m1 post 40 40} msg] $msg [.m1 unpost] [destroy .m1]
  1984. } {0 {} {} {}}
  1985. test menu-20.1 {CloneMenu} {
  1986.     catch {destroy .m1}
  1987.     catch {destroy .m2}
  1988.     menu .m1
  1989.     list [catch {.m1 clone .m2} msg1] $msg1 [destroy .m1]
  1990. } {0 {} {}}
  1991. test menu-20.2 {CloneMenu} {
  1992.     catch {destroy .m1}
  1993.     catch {destroy .m2}
  1994.     menu .m1
  1995.     list [catch {.m1 clone .m2 normal} msg1] $msg1 [destroy .m1]
  1996. } {0 {} {}}
  1997. test menu-20.3 {CloneMenu} {
  1998.     catch {destroy .m1}
  1999.     catch {destroy .m2}
  2000.     menu .m1
  2001.     list [catch {.m1 clone .m2 tearoff} msg1] $msg1 [destroy .m1]
  2002. } {0 {} {}}
  2003. test menu-20.4 {CloneMenu} {
  2004.     catch {destroy .m1}
  2005.     catch {destroy .m2}
  2006.     menu .m1
  2007.     list [catch {.m1 clone .m2 menubar} msg1] $msg1 [destroy .m1]
  2008. } {0 {} {}}
  2009. test menu-20.5 {CloneMenu} {
  2010.     catch {destroy .m1}
  2011.     catch {destroy .m2}
  2012.     menu .m1
  2013.     list [catch {.m1 clone .m2 foo} msg1] $msg1 [destroy .m1]
  2014. } {1 {bad menu type "foo": must be normal, tearoff, or menubar} {}}
  2015. test menu-20.6 {CloneMenu - hooking up bookeeping ptrs} {
  2016.     catch {destroy .m1}
  2017.     catch {destroy .m2}
  2018.     menu .m1
  2019.     list [catch {.m1 clone .m2} msg] $msg [destroy .m1]
  2020.  } {0 {} {}}
  2021.  test menu-20.7 {CloneMenu - hooking up bookeeping ptrs - multiple children} {
  2022.     catch {destroy .m1}
  2023.     catch {destroy .m2}
  2024.     catch {destroy .m3}
  2025.     menu .m1
  2026.     .m1 clone .m2
  2027.     list [catch {.m1 clone .m3} msg] $msg [destroy .m1]
  2028.  } {0 {} {}}
  2029.  test menu-20.8 {CloneMenu - cascade entries} {
  2030.     catch {destroy .m1}
  2031.     catch {destroy .foo}
  2032.     menu .m1
  2033.     .m1 add cascade -menu .m2
  2034.     list [catch {.m1 clone .foo} msg] $msg [destroy .m1]
  2035.  } {0 {} {}}
  2036.  test menu-20.9 {CloneMenu - cascades entries} {
  2037.     catch {destroy .m1}
  2038.     catch {destroy .m2}
  2039.     catch {destroy .foo}
  2040.     menu .m1
  2041.     .m1 add cascade -menu .m2
  2042.     menu .m2
  2043.     list [catch {.m1 clone .foo} msg] $msg [destroy .m1 .m2]
  2044.  } {0 {} {}}
  2045. test menu-20.10 {CloneMenu - tearoff fields} {
  2046.     catch {destroy .m1}
  2047.     catch {destroy .m2}
  2048.     menu .m1
  2049.     list [catch {.m1 clone .m2 normal} msg1] $msg1 [catch {.m2 cget -tearoff} msg2] $msg2 [destroy .m1]
  2050. } {0 {} 0 1 {}}
  2051. test menu-20.11 {CloneMenu} {
  2052.     catch {destroy .m1}
  2053.     catch {destroy .m2}
  2054.     menu .m1
  2055.     menu .m2
  2056.     list [catch {.m1 clone .m2} msg] $msg [destroy .m1 .m2]
  2057. } {1 {window name "m2" already exists in parent} {}}
  2058. test menu-21.1 {MenuDoYPosition} {
  2059.     catch {destroy .m1}
  2060.     menu .m1
  2061.     list [catch {.m1 yposition glorp} msg] $msg [destroy .m1]
  2062. } {1 {bad menu entry index "glorp"} {}}
  2063. test menu-21.2 {MenuDoYPosition} {
  2064.     catch {destroy .m1}
  2065.     menu .m1
  2066.     .m1 add command -label "Test"
  2067.     list [catch {.m1 yposition 1}] [destroy .m1]
  2068. } {0 {}}
  2069. test menu-22.1 {GetIndexFromCoords} {
  2070.     catch {destroy .m1}
  2071.     menu .m1
  2072.     .m1 add command -label "test"
  2073.     .m1 configure -tearoff 0
  2074.     list [catch {.m1 index @5} msg] $msg [destroy .m1]
  2075. } {0 0 {}}
  2076. test menu-22.2 {GetIndexFromCoords} {
  2077.     catch {destroy .m1}
  2078.     menu .m1
  2079.     .m1 add command -label "test"
  2080.     .m1 configure -tearoff 0
  2081.     list [catch {.m1 index @5,5} msg] $msg [destroy .m1]
  2082. } {0 0 {}}
  2083. test menu-23.1 {RecursivelyDeleteMenu} {
  2084.     catch {destroy .m1}
  2085.     menu .m1
  2086.     . configure -menu .m1
  2087.     list [catch {. configure -menu ""} msg] $msg [destroy .m1]
  2088. } {0 {} {}}
  2089. test menu-23.2 {RecursivelyDeleteMenu} {
  2090.     catch {destroy .m1}
  2091.     catch {destroy .m2}
  2092.     menu .m2
  2093.     .m2 add command -label "test2"
  2094.     menu .m1
  2095.     .m1 add cascade -label "test1" -menu .m2
  2096.     . configure -menu .m1
  2097.     list [catch {. configure -menu ""} msg] $msg [destroy .m1 .m2]
  2098. } {0 {} {}}
  2099. test menu-24.1 {TkNewMenuName} {
  2100.     catch {destroy .m1}
  2101.     menu .m1
  2102.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""] [destroy .m1]
  2103. } {0 {} {} {}}
  2104. test menu-24.2 {TkNewMenuName} {
  2105.     catch {destroy .m1}
  2106.     catch {destroy .m1#0}
  2107.     menu .m1
  2108.     menu .m1#0
  2109.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""] [destroy .m1]
  2110. } {0 {} {} {}}
  2111. test menu-24.3 {TkNewMenuName} {
  2112.     catch {destroy .#m}
  2113.     menu .#m
  2114.     rename .#m hideme
  2115.     list [catch {. configure -menu [menu .m]} $msg] [. configure -menu ""] [destroy .#m] [destroy .m] [destroy hideme]
  2116. } {0 {} {} {} {}}
  2117. test menu-25.1 {TkSetWindowMenuBar} {
  2118.     . configure -menu ""
  2119.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""]
  2120. } {0 {} {}}
  2121. test menu-25.2 {TkSetWindowMenuBar} {
  2122.     . configure -menu ""
  2123.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""]
  2124. } {0 {} {}}
  2125. test menu-25.3 {TkSetWindowMenuBar} {
  2126.     . configure -menu ""
  2127.     catch {destroy .m1}
  2128.     menu .m1
  2129.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""] [destroy .m1]
  2130. } {0 {} {} {}}
  2131. test menu-25.4 {TkSetWindowMenuBar} {
  2132.     catch {destroy .m1}
  2133.     catch {destroy .m2}
  2134.     . configure -menu ""
  2135.     menu .m1
  2136.     . configure -menu .m1
  2137.     menu .m2
  2138.     list [catch {. configure -menu .m2} msg] $msg [. configure -menu ""] [destroy .m1 .m2]
  2139. } {0 {} {} {}}
  2140. test menu-25.5 {TkSetWindowMenuBar} {
  2141.     catch {destroy .m1}
  2142.     catch {destroy .m2}
  2143.     catch {destroy .m3}
  2144.     . configure -menu ""
  2145.     menu .m1
  2146.     . configure -menu .m1
  2147.     .m1 clone .m2
  2148.     menu .m3
  2149.     list [catch {. configure -menu .m3} msg] $msg [. configure -menu ""] [destroy .m1 .m3]
  2150. } {0 {} {} {}}
  2151. test menu-25.6 {TkSetWindowMenuBar} {
  2152.     catch {destroy .m1}
  2153.     catch {destroy .m2}
  2154.     catch {destroy .m3}
  2155.     . configure -menu ""
  2156.     menu .m1
  2157.     .m1 clone .m2
  2158.     . configure -menu .m2
  2159.     menu .m3
  2160.     list [catch {. configure -menu .m3} msg] $msg [. configure -menu ""] [destroy .m1 .m3]
  2161. } {0 {} {} {}}
  2162. test menu-25.7 {TkSetWindowMenuBar} {
  2163.     catch {destroy .m1}
  2164.     catch {destroy .m2}
  2165.     . configure -menu ""
  2166.     menu .m1
  2167.     menu .m2
  2168.     . configure -menu .m1
  2169.     toplevel .t2
  2170.     .t2 configure -menu .m1
  2171.     list [catch {.t2 configure -menu .m2} msg] $msg [. configure -menu ""] [destroy .t2 .m1 .m2]
  2172. } {0 {} {} {}}
  2173. test menu-25.8 {TkSetWindowMenuBar} {
  2174.     catch {destroy .m1}
  2175.     catch {destroy .m2}
  2176.     catch {destroy .t2}
  2177.     . configure -menu ""
  2178.     menu .m1
  2179.     menu .m2
  2180.     . configure -menu .m1
  2181.     toplevel .t2
  2182.     wm geometry .t2 +0+0
  2183.     .t2 configure -menu .m1
  2184.     list [catch {. configure -menu .m2} msg] $msg [. configure -menu ""] [destroy .t2 .m1 .m2]
  2185. } {0 {} {} {}}
  2186. test menu-25.9 {TkSetWindowMenuBar} {
  2187.     catch {destroy .m1}
  2188.     catch {destroy .m2}
  2189.     catch {destroy .t2}
  2190.     catch {destroy .t3}
  2191.     . configure -menu ""
  2192.     menu .m1
  2193.     menu .m2
  2194.     . configure -menu .m1
  2195.     toplevel .t2 -menu .m1
  2196.     wm geometry .t2 +0+0
  2197.     toplevel .t3 -menu .m1
  2198.     wm geometry .t3 +0+0
  2199.     list [catch {.t3 configure -menu .m2} msg] $msg [. configure -menu ""] [destroy .t2 .t3 .m1 .m2]
  2200. } {0 {} {} {}}
  2201. test menu-25.10 {TkSetWindowMenuBar} {
  2202.     catch {destroy .m1}
  2203.     catch {destroy .m2}
  2204.     catch {destroy .t2}
  2205.     catch {destroy .t3}
  2206.     . configure -menu ""
  2207.     menu .m1
  2208.     menu .m2
  2209.     . configure -menu .m1
  2210.     toplevel .t2 -menu .m1
  2211.     wm geometry .t2 +0+0
  2212.     toplevel .t3 -menu .m1
  2213.     wm geometry .t3 +0+0
  2214.     list [catch {.t2 configure -menu .m2} msg] $msg [. configure -menu ""] [destroy .t2 .t3 .m1 .m2]
  2215. } {0 {} {} {}}
  2216. test menu-25.11 {TkSetWindowMenuBar} {
  2217.     catch {destroy .m1}
  2218.     catch {destroy .m2}
  2219.     catch {destroy .t2}
  2220.     catch {destroy .t3}
  2221.     . configure -menu ""
  2222.     menu .m1
  2223.     menu .m2
  2224.     . configure -menu .m1
  2225.     toplevel .t2 -menu .m1
  2226.     wm geometry .t2 +0+0
  2227.     toplevel .t3 -menu .m1
  2228.     wm geometry .t3 +0+0
  2229.     list [catch {. configure -menu .m2} msg] $msg [. configure -menu ""] [destroy .t2 .t3 .m1 .m2]
  2230. } {0 {} {} {}}
  2231. test menu-25.12 {TkSetWindowMenuBar} {
  2232.     catch {destroy .m1}
  2233.     . configure -menu ""
  2234.     menu .m1
  2235.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""] [destroy .m1]
  2236. } {0 {} {} {}}
  2237. test menu-25.13 {TkSetWindowMenuBar} {
  2238.     . configure -menu ""
  2239.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""]
  2240. } {0 {} {}}
  2241. test menu-25.14 {TkSetWindowMenuBar} {
  2242.     catch {destroy .m1}
  2243.     . configure -menu ""
  2244.     menu .m1
  2245.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""] [destroy .m1]
  2246. } {0 {} {} {}}
  2247. test menu-25.15 {TkSetWindowMenuBar} {
  2248.     . configure -menu ""
  2249.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""]
  2250. } {0 {} {}}
  2251. test menu-25.16 {TkSetWindowMenuBar} {
  2252.     catch {destroy .m1}
  2253.     . configure -menu ""
  2254.     menu .m1
  2255.     . configure -menu .m1
  2256.     list [catch {toplevel .t2 -menu m1} msg] $msg [. configure -menu ""] [destroy .t2 .m1]
  2257. } {0 .t2 {} {}}
  2258. test menu-26.1 {DestroyMenuHashTable} {
  2259.     catch {interp destroy testinterp}
  2260.     interp create testinterp
  2261.     load {} Tk testinterp
  2262.     interp eval testinterp {menu .m1}
  2263.     list [catch {interp delete testinterp} msg] $msg
  2264. } {0 {}}
  2265. test menu-27.1 {GetMenuHashTable} {
  2266.     catch {interp destroy testinterp}
  2267.     interp create testinterp
  2268.     load {} Tk testinterp
  2269.     list [catch {interp eval testinterp {menu .m1}} msg] $msg [interp delete testinterp]
  2270. } {0 .m1 {}}
  2271. test menu-28.1 {TkCreateMenuReferences - not there before} {
  2272.     catch {destroy .m1}
  2273.     list [catch {menu .m1} msg] $msg [destroy .m1]
  2274. } {0 .m1 {}}
  2275. test menu-28.2 {TkCreateMenuReferences - there already} {
  2276.     catch {destroy .m1}
  2277.     catch {destroy .m2}
  2278.     menu .m1
  2279.     .m1 add cascade -menu .m2
  2280.     list [catch {menu .m2} msg] $msg [destroy .m1 .m2]
  2281. } {0 .m2 {}}
  2282. test menu-29.1 {TkFindMenuReferences - not there} {
  2283.     catch {destroy .m1}
  2284.     . configure -menu ""
  2285.     menu .m1
  2286.     .m1 add cascade -menu .m2
  2287.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""] [destroy .m1]
  2288. } {0 {} {} {}}
  2289. test menu-30.1 {TkFindMenuReferences - there already} {
  2290.     catch {destroy .m1}
  2291.     catch {destroy .m2}
  2292.     . configure -menu ""
  2293.     menu .m1
  2294.     menu .m2
  2295.     .m1 add cascade -menu .m2
  2296.     list [catch {. configure -menu .m1} msg] $msg [. configure -menu ""] [destroy .m1 .m2]
  2297. } {0 {} {} {}}
  2298. test menu-31.1 {TkFreeMenuReferences - menuPtr} {
  2299.     catch {destroy .m1}
  2300.     menu .m1
  2301.     list [catch {destroy .m1} msg] $msg
  2302. } {0 {}}
  2303. test menu-31.2 {TkFreeMenuReferences - cascadePtr} {
  2304.     catch {destroy .m1}
  2305.     . configure -menu ""
  2306.     menu .m1
  2307.     .m1 add cascade -menu .m2
  2308.     list [catch {.m1 entryconfigure 1 -menu .m3} msg] $msg [destroy .m1]
  2309. } {0 {} {}}
  2310. test menu-31.3 {TkFreeMenuReferences - topLevelListPtr} {
  2311.     . configure -menu .m1
  2312.     list [catch {. configure -menu ""} msg] $msg
  2313. } {0 {}}
  2314. test menu-31.4 {TkFreeMenuReferences - not empty} {
  2315.     catch {destroy .m1}
  2316.     catch {destroy .m2}
  2317.     menu .m1
  2318.     .m1 add cascade -menu .m3
  2319.     menu .m2
  2320.     .m2 add cascade -menu .m3
  2321.     list [catch {.m2 entryconfigure 1 -menu ".foo"} msg] $msg [destroy .m1 .m2]
  2322. } {0 {} {}}
  2323. test menu-32.1 {DeleteMenuCloneEntries} {
  2324.     catch {destroy .m1}
  2325.     catch {destroy .m2}
  2326.     menu .m1
  2327.     .m1 add command -label foo
  2328.     .m1 clone .m2
  2329.     list [catch {.m1 delete 1} msg] $msg [destroy .m1]
  2330. } {0 {} {}}
  2331. test menu-32.2 {DeleteMenuCloneEntries} {
  2332.     catch {destroy .m1}
  2333.     catch {destroy .m2}
  2334.     menu .m1
  2335.     .m1 add command -label one
  2336.     .m1 add command -label two
  2337.     .m1 add command -label three
  2338.     .m1 add command -label four
  2339.     .m1 clone .m2
  2340.     list [catch {.m1 delete 2 3} msg] $msg [destroy .m1]
  2341. } {0 {} {}}
  2342. test menu-32.3 {DeleteMenuCloneEntries} {
  2343.     catch {destroy .m1}
  2344.     catch {destroy .m2}
  2345.     menu .m1 -tearoff 0
  2346.     .m1 add command -label one
  2347.     .m1 add command -label two
  2348.     .m1 add command -label three
  2349.     .m1 add command -label four
  2350.     .m1 clone .m2
  2351.     .m2 configure -tearoff 1
  2352.     list [catch {.m1 delete 1 2} msg] $msg [destroy .m1]
  2353. } {0 {} {}}
  2354. test menu-32.4 {DeleteMenuCloneEntries} {
  2355.     catch {destroy .m1}
  2356.     catch {destroy .m2}
  2357.     menu .m1
  2358.     .m1 add command -label one
  2359.     .m1 add command -label two
  2360.     .m1 add command -label three
  2361.     .m1 add command -label four
  2362.     .m1 clone .m2
  2363.     .m2 configure -tearoff 0
  2364.     list [catch {.m1 delete 2 3} msg] $msg [destroy .m1]
  2365. } {0 {} {}}
  2366. test menu-32.5 {DeleteMenuCloneEntries} {
  2367.     catch {destroy .m1}
  2368.     catch {destroy .m2}
  2369.     menu .m1
  2370.     .m1 add command -label one
  2371.     .m1 add command -label two
  2372.     .m1 clone .m2
  2373.     .m1 activate one
  2374.     list [catch {.m1 delete one} msg] $msg [destroy .m1]
  2375. } {0 {} {}}
  2376. test menu-32.6 {DeleteMenuCloneEntries - reentrancy - crashes tk8.0} {
  2377.     catch {destroy .m1}
  2378.     menu .m1
  2379.     .m1 add command -label test -command ".m1 delete test ; .m1 add command -label test -command ".m1 delete test"; .m1 delete test"
  2380.     list [catch {.m1 invoke test} msg] $msg [destroy .m1]
  2381. } {0 {} {}}
  2382. test menu-32.7 {DeleteMenuCloneEntries - one entry} {
  2383.     catch {destroy .m1}
  2384.     menu .m1 -tearoff 0
  2385.     .m1 add command -label Hello
  2386.     list [catch {.m1 delete Hello} msg] $msg [destroy .m1]
  2387. } {0 {} {}}
  2388. test menu-32.8 {Ensure all menu clone commands are deleted} {
  2389.     # SF bug #465324
  2390.     catch {destroy .menubar}
  2391.     catch {destroy .menubar.test}
  2392.     menu .menubar
  2393.     . configure -menu .menubar
  2394.     menu .menubar.test
  2395.     .menubar.test add command -label "hi"
  2396.     for {set i 0} {$i < 10} {incr i} {
  2397. .menubar add cascade -menu .menubar.test -label "Test"
  2398. .menubar delete Test
  2399.     }
  2400.     info commands .#menubar*test*
  2401. } {}
  2402. test menu-32.9 {Ensure deleting of clones doesn't corrupt menu refs} {
  2403.     catch {destroy .menubar}
  2404.     catch {destroy .menubar.test}
  2405.     
  2406.     menu .menubar
  2407.     . configure -menu .menubar
  2408.     menu .menubar.test
  2409.     .menubar add cascade -menu .menubar.test -label "Test"
  2410.     menu .menubar.cascade
  2411.     .menubar.test add cascade -menu .menubar.cascade -label "Cascade"
  2412.     set res {}
  2413.     lappend res [.menubar.test entrycget 1 -menu]
  2414.     lappend res [.#menubar.#menubar#test entrycget 1 -menu]
  2415.     destroy .menubar.test
  2416.     menu .menubar.test
  2417.     .menubar.test add cascade -menu .menubar.cascade -label "Cascade"
  2418.     lappend res [.menubar.test entrycget 1 -menu]
  2419.     lappend res [.#menubar.#menubar#test entrycget 1 -menu]
  2420.     set res
  2421. } {.menubar.cascade .#menubar.#menubar#test.#menubar#cascade .menubar.cascade .#menubar.#menubar#test.#menubar#cascade}
  2422. set l [interp hidden]
  2423. deleteWindows
  2424. test menu-33.1 {menu vs command hiding} {
  2425.     catch {destroy .m}
  2426.     menu .m
  2427.     interp hide {} .m
  2428.     destroy .m
  2429.     list [winfo children .] [interp hidden]
  2430. } [list {} $l]
  2431. # menu-34 MenuInit only called at boot time
  2432. # creating menus on two different screens then deleting the
  2433. # menu from the first screen crashes Tk8.3.1
  2434. #
  2435. test menu-35.1 {menus on multiple screens - crashes tk8.3.1, Bug 5454} 
  2436. {altDisplay} {
  2437.     toplevel .one
  2438.     menu .one.m
  2439.     toplevel .two -screen $::env(TK_ALT_DISPLAY)
  2440.     menu .two.m
  2441.     destroy .one
  2442.     destroy .two
  2443. } {}
  2444. test menu-36.1 {menu -underline string overruns Bug 1599877} {} {
  2445.     # ensure that -underline does not do string overruns [Bug 1599877]
  2446.     catch {destroy .m}
  2447.     menu .m
  2448.     .m add command -label "File" -underline [expr {1<<30}]
  2449.     . configure -menu .m
  2450.     update
  2451.     tk::TraverseToMenu . "e"
  2452. } {}
  2453. # cleanup
  2454. deleteWindows
  2455. ::tcltest::cleanupTests
  2456. return