# This file is a Tcl script to test menus in Tk.  It is
# organized in the standard fashion for Tcl tests. This
# file tests the Macintosh-specific features of the menu
# system.
#
# Copyright (c) 1995-1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
# All rights reserved.
#
# RCS: @(#) $Id: macMenu.test,v 1.1.1.1 1999/06/25 17:36:18 damon Exp $

if {[lsearch [namespace children] ::tcltest] == -1} {
    source [file join [pwd] [file dirname [info script]] defs.tcl]
}

if {$tcl_platform(platform) != "macintosh"} {
    puts "skipping: Mac only tests..."
    ::tcltest::cleanupTests
    return
}

if {[lsearch [image types] test] < 0} {
    puts "This application hasn't been compiled with the \"test\" image"
    puts "type, so I can't run this test.  Are you sure you're using"
    puts "tktest instead of wish?"
    ::tcltest::cleanupTests
    return
}

proc deleteWindows {} {
    foreach i [winfo children .] {
    	catch [destroy $i]
    }
}

deleteWindows
wm geometry . {}
raise .

test macMenu-1.0 {TkMacUseMenuID} {} {
    # Can't really test TkMacUseMenuID; it's only called on startup.
} {}

test macMenu-2.1 {GetNewID} {
    catch {destroy .m1}
    list [catch {menu .m1} msg] $msg [destroy .m1]
} {0 .m1 {}}
test macMenu-2.2 {GetNewID - cascade menu} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m2
    list [catch {menu .m2} msg] $msg [destroy .m1] [destroy .m2]
} {0 .m2 {} {}}
test macMenu-2.3 {GetNewID - running out of ids} {
    deleteWindows
    menu .menu
    for {set i 0} {$i < 230} {incr i} {
    	menu .m$i
    	.menu add cascade -label ".m$i" -menu .m$i
    }
    menu .breaker
    list [catch {.menu add cascade -menu .breaker} msg] $msg [deleteWindows]
} {1 {No more menus can be allocated.} {}}

test macMenu-3.1 {FreeID} {
    catch {destroy .m1}
    menu .m1
    list [catch {destroy .m1} msg] $msg
} {0 {}}

# No way to test running out of ids in TkpNewPlatformMenu
test macMenu-4.1 {TkpNewMenu} {
    catch {destroy .m1}
    list [catch {menu .m1} msg] $msg [catch {destroy .m1} msg2] $msg2
} {0 .m1 0 {}}
test macMenu-4.2 {TkpNewMenu - checking for help menu when one is there} {
    catch {destroy .m1}
    catch {destroy .m2}
    menu .m1
    menu .m1.help -tearoff 0
    .m1.help add command -label Test
    . configure -menu .m1
    raise .
    update
    list [catch {menu .m2} msg] $msg [destroy .m1] [destroy .m2] [. configure -menu ""]
} {0 .m2 {} {} {}}
test macMenu-4.3 {TkpNewMenu - menubar set but different interp} {
    catch {interp delete testinterp}
    catch {destroy .m1}
    interp create testinterp
    load {} Tk testinterp
    interp eval testinterp {raise .}
    interp eval testinterp {menu .m1}
    interp eval testinterp {. configure -menu .m1}
    interp eval testinterp {update}
    list [catch {menu .m1} msg] $msg [destroy .m1] [interp delete testinterp]
} {0 .m1 {} {}}
test macMenu-4.4 {TkpNewMenu - menubar set but new menu has different parent} {
    catch {destroy .m1}
    catch {destroy .m2}
    menu .m1 -tearoff 0
    .m1 add cascade -menu .m1.help
    menu .m2
    .m2 add cascade -menu .m2.help
    . configure -menu .m1
    raise .
    update
    list [catch {menu .m2.help} msg] $msg [. configure -menu ""] [destroy .m1] [destroy .m2]
} {0 .m2.help {} {} {}}
test macMenu-4.5 {TkpNewMenu - menubar set, same parent, not .help} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add cascade -menu .m1.help
    . configure -menu .m1
    raise .
    update
    list [catch {menu .m1.foo} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 .m1.foo {} {}}
test macMenu-4.6 {TkpNewMenu - creating the help menu} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add cascade -menu .m1.help
    . configure -menu .m1
    raise .
    update
    list [catch {menu .m1.help} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 .m1.help {} {}}

test macMenu-5.1 {TkpDestroyMenu} {
    catch {destroy .m1}
    menu .m1
    list [catch {destroy .m1} msg] $msg
} {0 {}}
test macMenu-5.2 {TkpDestroyMenu - help menu} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add cascade -menu .m1.help
    . configure -menu .m1
    menu .m1.help
    raise .
    update
    list [catch {destroy .m1.help} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-5.3 {TkpDestroyMenu - idle handler pending} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label test
    list [catch {destroy .m1} msg] $msg
} {0 {}}
test macMenu-5.4 {TkpDestroyMenu - idle handler not pending} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label test
    update idletasks
    list [catch {destroy .m1} msg] $msg
} {0 {}}

test macMenu-6.1 {SetMenuCascade} {
    catch {destroy .m1}
    catch {destroy .m2}
    menu .m1
    menu .m2
    list [catch {.m2 add cascade -menu .m1} msg] $msg [destroy .m1 .m2]
} {0 {} {}}
test macMenu-6.2 {SetMenuCascade - running out of ids} {
    deleteWindows
    menu .menu
    for {set i 0} {$i < 230} {incr i} {
    	menu .m$i
    	.menu add cascade -label ".m$i" -menu .m$i
    }
    menu .breaker
    list [catch {.menu add cascade -menu .breaker} msg] $msg [deleteWindows]
} {1 {No more menus can be allocated.} {}}

test macMenu-7.1 {TkpDestroyMenuEntry} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "test"
    list [catch {.m1 delete 1} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-7.2 {TkpDestroyMenuEntry - help menu} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.help
    menu .m1.help -tearoff 0
    .m1.help add command -label "test"
    . configure -menu .m1
    raise .
    update
    list [catch {.m1.help delete test} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}

test macMenu-8.1 {GetEntryText} {
    catch {destroy .m1}
    list [catch {menu .m1} msg] $msg [destroy .m1]
} {0 .m1 {}}
test macMenu-8.2 {GetEntryText} {
    catch {destroy .m1}
    catch {image delete image1}
    menu .m1
    image create test image1
    list [catch {.m1 add command -image image1} msg] $msg [destroy .m1] [image delete image1]
} {0 {} {} {}}
test macMenu-8.3 {GetEntryText} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -bitmap questhead} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-8.4 {GetEntryText} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-8.5 {GetEntryText} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "foo"
    list [catch {.m1 add command -label "foo"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-8.6 {GetEntryText} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -label "This is a very long string. 9012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890"} \
    	    msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-8.7 {GetEntryText - elipses character} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -label "foo..."} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-8.8 {GetEntryText - false elipses character} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -label "foo."} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-8.9 {GetEntryText - false elipses character} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -label "foo.."} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-8.10 {GetEntryText - false elipses character} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -label "foo.b"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-8.11 {GetEntryText - false elipses character} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -label "foo..b"} msg] $msg [destroy .m1]
} {0 {} {}}


# test macMenu-9.1 - assumes some fonts
test macMenu-9.1 {FindMarkCharacter} {
    catch {destroy .m1}
    menu .m1 -font "Helvetica 12" -tearoff 0
    .m1 add checkbutton -label test
    .m1 invoke test
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
# All standard fonts have "¥" defined. We can't test further.

test macMenu-10.1 {SetMenuIndicator - cascade entry} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add cascade -label foo} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-10.2 {SetMenuIndicator - not radio or checkbutton} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -label foo} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-10.3 {SetMenuIndicator - indiatorOn false} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add checkbutton -label foo -indicatoron 0} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-10.4 {SetMenuIndicator - entry not selected} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add checkbutton -label foo} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-10.5 {SetMenuIndicator - checkbutton} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label foo
    list [catch {.m1 invoke foo} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-10.6 {SetMenuIndicator - radio button} {
    catch {destroy .m1}
    menu .m1
    .m1 add radiobutton -label foo
    list [catch {.m1 invoke foo} msg] $msg [destroy .m1]
} {0 {} {}}

test macMenu-11.1 {SetMenuTitle} {
    catch {destroy .m1}
    catch {destroy .container}
    menu .container
    menu .m1
#previous title is .m1
    .container add cascade -label "File" -menu .m1
    list [catch {. configure -menu .container} msg] $msg [. configure -menu ""] [destroy .container .m1]
} {0 {} {} {}}
test macMenu-11.2 {SetMenuTitle} {
    menu .container
    menu .m1
    . configure -menu ""
#previous title is .m1
    .container add cascade -label "F" -menu .m1
    list [catch {. configure -menu .container} msg] $msg [. configure -menu ""] [destroy .container .m1]
} {0 {} {} {}}

test macMenu-12.1 {TkpConfigureMenuEntry} {
    catch {destroy .m1}
    . configure -menu ""
    menu .m1
    .m1 add cascade -menu .m3
    list [catch {.m1 entryconfigure 1 -menu .m2} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.2 {TkpConfigureMenuEntry} {
    catch {destroy .m1}
    catch {destroy .m2}
    . configure -menu ""
    menu .m1
    .m1 add cascade -menu .m3
    menu .m2
    list [catch {.m1 entryconfigure 1 -menu .m2} msg] $msg [destroy .m1 .m2]
} {0 {} {}}
test macMenu-12.3 {TkpConfigureMenuEntry - running out of ids} {
    deleteWindows
    menu .menu
    for {set i 0} {$i < 230} {incr i} {
    	menu .m$i
    	.menu add cascade -label ".m$i" -menu .m$i
    }
    menu .breaker
    list [catch {.menu add cascade -menu .breaker} msg] $msg [deleteWindows]
} {1 {No more menus can be allocated.} {}}
test macMenu-12.4 {TkpConfigureMenuEntry - Control} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -accel "Control+S"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.5 {TkpConfigureMenuEntry - Ctrl} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -accel "Ctrl+S"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.6 {TkpConfigureMenuEntry - Shift} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -accel "Shift+S"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.7 {TkpConfigureMenuEntry - Option} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -accel "Opt+S"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.8 {TkpConfigureMenuEntry - Command} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -accel "Command+S"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.9 {TkpConfigureMenuEntry - Cmd} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -accel "Cmd+S"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.10 {TkpConfigureMenuEntry - Alt} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -accel "Alt+S"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.11 {TkpConfigureMenuEntry - Meta} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -accel "Meta+S"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.12 {TkpConfigureMenuEntry - Two modifiers} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -accel "Cmd+Shift+S"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.13 {TkpConfigureMenuEntry - dash instead of plus} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -accel "Command-S"} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.14 {TkpConfigureMenuEntry - idler pending} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add command -label test
    list [catch {.m1 entryconfigure test -label test2} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-12.15 {TkpConfigureMenuEntry - idler not pending} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add command -label test
    update idletasks
    list [catch {.m1 entryconfigure test -label test2} msg] $msg [destroy .m1]
} {0 {} {}}

test macMenu-13.1 {ReconfigureIndividualMenu - getting rid of zero items} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add command -label test
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.2 {ReconfigureIndividualMenu - getting rid of one item} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add command -label test
    update idletasks
    .m1 delete test
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.3 {ReconfigureIndividualMenu - getting rid of more than one} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add command -label test
    .m1 add command -label test2
    update idletasks
    .m1 entryconfigure test2 -label "test two"
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.4 {ReconfigureIndividualMenu - separator} {
    catch {destroy .m1}
    menu .m1
    .m1 add separator
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.5 {ReconfigureIndividualMenu - disabled} {
    catch {destroy .m1}
    menu .m1
    .m1 add command
    .m1 entryconfigure 1 -state disabled
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.6 {ReconfigureIndividualMenu - active} {
    catch {destroy .m1}
    menu .m1
    .m1 add command
    .m1 entryconfigure 1 -state active
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.7 {ReconfigureIndividualMenu - checkbutton not checked} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label test
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.8 {ReconfigureIndividualMenu - checkbutton - indicator off} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label test -indicatoron 0
    .m1 invoke test
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.9 {ReconfigureIndividualMenu - checkbutton on} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label test
    .m1 invoke test
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.10 {ReconfigureIndividualMenu - radiobutton not checked} {
    catch {destroy .m1}
    menu .m1
    .m1 add radiobutton -label test
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.11 {ReconfigureIndividualMenu - radiobutton - indicator off} {
    catch {destroy .m1}
    menu .m1
    .m1 add radiobutton -label test -indicatoron 0
    .m1 invoke test
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.12 {ReconfigureIndividualMenu - radiobutton on} {
    catch {destroy .m1}
    menu .m1
    .m1 add radiobutton -label test
    .m1 invoke test
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.13 {ReconfigureIndividualMenu} {
    catch {destroy .m1}
    . configure -menu ""
    menu .m1
    .m1 add cascade -menu .m3
    .m1 entryconfigure 1 -menu .m2
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.14 {ReconfigureIndividualMenu} {
    catch {destroy .m1}
    catch {destroy .m2}
    . configure -menu ""
    menu .m1
    .m1 add cascade -menu .m3
    menu .m2
    .m1 entryconfigure 1 -menu .m2
    list [catch {update idletasks} msg] $msg [destroy .m1 .m2]
} {0 {} {}}
test macMenu-13.15 {ReconfigureIndividualMenu - accelerator} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -accel "Command-S"
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.16 {ReconfigureIndividualMenu - parent is disabled} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -label .m1.edit -label "Edit" -state disabled
    menu .m1.edit
    .m1.edit add command -label foo
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-13.17 {ReconfigureIndividualMenu - disabling parent} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -label .m1.edit -label Edit
    menu .m1.edit
    .m1.edit add command -label foo
    .m1 entryconfigure Edit -state disabled
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}

test macMenu-14.1 {ReconfigureMacintoshMenu - normal menu} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add command -label test
    list [catch {update idletasks} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-14.2 {ReconfigureMacintoshMenu - apple menu} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.apple
    menu .m1.apple -tearoff 0
    .m1.apple add command -label test
    . configure -menu .m1
    raise .
    list [catch {update idletasks} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-14.3 {ReconfigureMacintoshMenu - help menu} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.help
    menu .m1.help -tearoff 0
    .m1.help add command -label test
    . configure -menu .m1
    raise .
    list [catch {update idletasks} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-14.4 {ReconfigureMacintoshMenu - menubar} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.file -label "foo"
    menu .m1.file
    . configure -menu .m1
    raise .
    .m1 entryconfigure foo -label "File"
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}

test macMenu-15.1 {CompleteIdlers - no idle pending} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label test
    update idletasks
    list [catch {.m1 post 40 40} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-15.2 {CompleteIdlers - idle pending} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label test
    list [catch {.m1 post 40 40} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-15.3 {CompleteIdlers - recursive} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.m2 -label test
    menu .m1.m2
    .m1.m2 add command -label test
    list [catch {.m1 post 40 40} msg] $msg [destroy .m1]
} {0 {} {}}

#Don't know how to generate nested post menus
test macMenu-16.1 {TkpPostMenu} {
    catch {destroy .m1}
    menu .m1 -postcommand "destroy .m1"
    list [catch {.m1 post 40 40} msg] $msg
} {0 {}}
test macMenu-16.2 {TkpPostMenu} {
    catch {destroy .m1}
    menu .m1 -postcommand "blork"
    list [catch {.m1 post 40 40} msg] $msg [destroy .m1]
} {1 {invalid command name "blork"} {}}
# We need to write the interactive test for menu posting.

test macMenu-17.1 {TkpMenuNewEntry - no idle pending} {
    catch {destroy .m1}
    menu .m1
    list [catch {.m1 add command -label test} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-17.2 {TkpMenuNewEntry - idle pending} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label test
    list [catch {.m1 add command -label test2} msg] $msg [destroy .m1]
} {0 {} {}}

test macMenu-18.1 {DrawMenuBarWhenIdle} {
    catch {destroy .m1}
    . configure -menu ""
    menu .m1
    . configure -menu .m1
    list [catch {update idletasks} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.2 {DrawMenuBarWhenIdle - clearing old apple menu out} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.apple
    menu .m1.apple
    .m1.apple add command -label test
    . configure -menu .m1
    raise .
    update
    . configure -menu ""
    raise .
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-18.3 {DrawMenuBarWhenIdle - clearing out old help menu} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.help
    menu .m1.help
    .m1.help add command -label test
    . configure -menu .m1
    raise .
    update
    . configure -menu ""
    raise .
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-18.4 {DrawMenuBarWhenIdle - menu not there} {
    catch {destroy .m1}
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""]
} {0 {} {}}
test macMenu-18.5 {DrawMenuBarWhenIdle - menu there} {
    catch {destroy .m1}
    menu .m1
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.6 {DrawMenuBarWhenIdle - no apple menu} {
    catch {destroy .m1}
    menu .m1
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.7 {DrawMenuBarWhenIdle - apple menu references but not there} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.apple
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.8 {DrawMenuBarWhenIdle - apple menu there} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.apple
    menu .m1.apple
    .m1.apple add command -label test
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.9 {DrawMenuBarWhenIdle - apple menu there; no idle handler} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.apple
    menu .m1.apple
    .m1.apple add command -label test
    . configure -menu .m1
    raise .
    update idletasks
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.10 {DrawMenuBarWhenIdle - no help menu} {
    catch {destroy .m1}
    menu .m1
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.11 {DrawMenuBarWhenIdle - help menu referenced but not there} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.help
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.12 {DrawMenuBarWhenIdle - help menu there} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.help
    menu .m1.help
    .m1.help add command -label test
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.13 {DrawMenuBarWhenIdle - help menu there - no idlers} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.help
    menu .m1.help
    .m1.help add command -label test
    . configure -menu .m1
    raise .
    update idletasks
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
# Can't generate no menubar clone
test macMenu-18.14 {DrawMenuBarWhenIdle - apple and help menus in tearoff menubar} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -menu .m1.apple
    .m1 add cascade -menu .m1.help
    menu .m1.apple
    menu .m1.help
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.15 {DrawMenuBarWhenIdle - apple and help menus in non-tearoff menubar} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add cascade -menu .m1.apple
    .m1 add cascade -menu .m1.help
    menu .m1.apple
    menu .m1.help
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.16 {DrawMenuBarWhenIdle - no apple menu} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.17 {DrawMenuBarWhenIdle - apple menu} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    . configure -menu .m1
    .m1 add cascade -menu .m1.apple
    menu .m1.apple
    .m1.apple add cascade -label test -menu .m1.apple.test
    menu .m1.apple.test
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.18 {DrawMenuBarWhenIdle - big for loop} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    menu .m1.apple -tearoff 0
    menu .m1.help -tearoff 0
    menu .m1.foo -tearoff 0
    .m1 add cascade -menu .m1.apple
    .m1 add cascade -menu .m1.help
    .m1 add cascade -label Foo -menu .m1.foo
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-18.19 {DrawMenuBarWhenIdle = disabled menu} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    menu .m1.edit -tearoff 0
    .m1 add cascade -menu .m1.edit -label Edit
    . configure -menu .m1
    raise .
    .m1 entryconfigure Edit -state disabled
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}

test macMenu-19.1 {RecursivelyInsertMenu} {
    catch {destroy .m1}
    catch {destroy .m2}
    catch {destroy .main}
    catch {destroy .t2}
    toplevel .t2 -menu .main
    wm geometry .t2 +0+0
    menu .main
    .main add cascade -menu .m1 -label ".m1"
    menu .m1
    .m1 add command -label "Test 2"
    .m1 add cascade -label ".m2" -menu .m2
    menu .m2
    .m2 add command -label "Test 3"
    list [catch {raise .t2} msg] $msg [destroy .t2 .main .m1 .m2]
} {0 {} {}}
test macMenu-19.2 {RecursivelyInsertMenu} {
    catch {destroy .m1}
    catch {destroy .m2}
    catch {destroy .main}
    catch {destroy .t2}
    toplevel .t2 -menu .main
    wm geometry .t2 +0+0
    menu .main
    .main add cascade -menu .m1 -label ".m1"
    menu .m1
    .m1 add command -label "Test 2"
    .m1 add cascade -label ".m2" -menu .m2
    menu .m2
    .m2 add command -label "Test 3"
    list [catch {raise .t2} msg] $msg [destroy .t2 .main .m1 .m2]
} {0 {} {}}

test macMenu-20.1 {SetDefaultMenuBar} {
    . configure -menu ""
    raise .
    list [catch {update} msg] $msg
} {0 {}}

test macMenu-21.1 {TkpSetMainMenubar - not front window} {
    catch {destroy .m1}
    catch {destroy .t2}
    toplevel .t2
    wm geometry .t2 +50+50
    menu .m1
    raise .
    update
    list [catch {.t2 configure -menu .m1} msg] $msg [destroy .t2] [destroy .m1]
} {0 {} {} {}}
test macMenu-21.2 {TkpSetMainMenubar - menu null} {
    . configure -menu ""
    raise .
    list [catch {update} msg] $msg
} {0 {}}
test macMenu-21.3 {TkpSetMainMenubar - different interps} {
    catch {destroy .m1}
    catch {interp delete testinterp}
    interp create testinterp
    load {} tk testinterp
    menu .m1
    . configure -menu .m1
    raise .
    update
    interp eval testinterp {menu .m1}
    interp eval testinterp {. configure -menu .m1}
    interp eval testinterp {raise .}
    list [catch {interp eval testinterp {update}} msg] $msg [interp delete testinterp] [. configure -menu ""] [destroy .m1]
} {0 {} {} {} {}}
test macMenu-21.4 {TkpSetMainMenubar - different windows} {
    catch {destroy .m1}
    catch {destroy .t2}
    menu .m1
    . configure -menu .m1
    toplevel .t2
    wm geometry .t2 +50+50
    .t2 configure -menu .m1
    raise .
    update
    raise .t2
    list [catch {update} msg] $msg [destroy .t2] [. configure -menu ""] [destroy .m1]
} {0 {} {} {} {}}
test macMenu-21.5 {TkpSetMainMenubar - old menu was null} {
    catch {destroy .m1}
    . configure -menu ""
    update
    menu .m1
    . configure -menu .m1
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}
test macMenu-21.6 {TkpSetMainMenubar - old menu different} {
    catch {destroy .m1}
    catch {destroy .m2}
    menu .m1
    menu .m2
    . configure -menu .m1
    raise .
    update
    . configure -menu .m2
    raise .
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1] [destroy .m2]
} {0 {} {} {} {}}
test macMenu-21.7 {TkpSetMainMenubar - child window NULL - parent window now} {
    catch {destroy .m1}
    catch {destroy .t2}
    toplevel .t2 
    menu .m1
    .m1 add cascade -label Foo -menu .m1.foo
    menu .m1.foo
    .m1.foo add command -label foo
    . configure -menu .m1
    raise .t2
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1] [destroy .t2]
} {0 {} {} {} {}}
test macMenu-21.8 {TkpSetMainMenubar - tearoff window} {
    catch {destroy .t2}
    toplevel .t2 -menu .t2.m1
    menu .t2.m1
    .t2.m1 add cascade -label File -menu .t2.m1.foo
    menu .t2.m1.foo
    .t2.m1.foo add command -label foo
    raise .t2
    tkTearOffMenu .t2.m1.foo 100 100
    list [catch {update} msg] $msg [destroy .t2]
} {0 {} {}}

test macMenu-22.1 {TkSetWindowMenuBar} {
} {}

test macMenu-23.1 {TkMacDispatchMenuEvent} {
    # needs to be interactive.
} {}

test macMenu-24.1 {GetMenuIndicatorGeometry} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label foo
    .m1 invoke foo
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}

test macMenu-25.1 {GetMenuAccelGeometry - cascade entry} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -label foo
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}
test macMenu-25.2 {GetMenuAccelGeometry - no accel} {
    catch {destroy .m1}
    menu .m1
    .m1 add command
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}
test macMenu-25.3 {GetMenuAccelGeometry - no special chars - arbitrary string} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -accel "Test"
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}
test macMenu-25.4 {GetMenuAccelGeometry - Command} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Cmd+S"
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}
test macMenu-25.5 {GetMenuAccelGeometry - Control} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Ctrl+S"
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}
test macMenu-25.6 {GetMenuAccelGeometry - Shift} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Shift+S"
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}
test macMenu-25.7 {GetMenuAccelGeometry - Option} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Opt+S"
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}
test macMenu-25.8 {GetMenuAccelGeometry - Combination} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Cmd+Shift+S"
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}
test macMenu-25.9 {GetMenuAccelGeometry - extra text} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Command+Delete"
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}
    
test macMenu-26.1 {GetTearoffEntryGeometry} {
    # can't call this on power mac.
} {}

test macMenu-27.1 {GetMenuSeparatorGeometry} {
    catch {destroy .m1}
    menu .m1
    .m1 add separator
    list [catch {tkTearOffMenu .m1 40 40}] [destroy .m1]
} {0 {}}

test macMenu-28.1 {DrawMenuEntryIndicator - non-checkbutton} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-28.2 {DrawMenuEntryIndicator - indicator off} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label foo -indicatoron 0
    .m1 invoke foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-28.3 {DrawMenuEntryIndicator - not selected} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-28.4 {DrawMenuEntryIndicator - checkbutton} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label foo
    .m1 invoke foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-28.5 {DrawMenuEntryIndicator - radiobutton} {
    catch {destroy .m1}
    menu .m1
    .m1 add radiobutton -label foo
    .m1 invoke foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}

# Cannot reproduce resources missing or color allocation failing easily.
test macMenu-29.1 {DrawSICN} {
   catch {destroy .m1}
   menu .m1
   .m1 add command -label foo -accel "Cmd+S"
   set tearoff [tkTearOffMenu .m1 40 40]
   list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}

# Cannot reproduce resources missing
test macMenu-30.1 {DrawMenuEntryAccelerator - cascade entry} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-30.2 {DrawMenuEntryAccelerator - no accel string} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-30.3 {DrawMenuEntryAccelerator - random accel string} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-30.4 {DrawMenuEntryAccelerator - Command} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Cmd+S"
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-30.5 {DrawMenuEntryAccelerator - Option} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Opt+S"
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-30.6 {DrawMenuEntryAccelerator - Shift} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Shift+S"
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-30.7 {DrawMenuEntryAccelerator - Control} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Ctrl+S"
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}
test macMenu-30.8 {DrawMenuEntryAccelerator - combination} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -accel "Cmd+Shift+S"
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}

test macMenu-31.1 {DrawMenuSeparator} {
    catch {destroy .m1}
    menu .m1
    .m1 add separator
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}

test macMenu-32.1 {TkpDrawMenuEntryLabel} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [catch {update} msg] $msg [destroy .m1]
} {0 {} {}}

test macMenu-33.1 {MenuDefProc - No way to test automatically.} {} {}
test macMenu-34.1 {TkMacHandleTearoffMenu - no way to test automatically} {} {}
test macMenu-35.1 {TkpInitializeMenuBindings - nothing to do} {} {}

test macMenu-36.1 {TkpComputeMenubarGeometry} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -label foo
    . configure -menu .m1
    list [catch {update} msg] $msg [. configure -menu ""] [destroy .m1]
} {0 {} {} {}}

test macMenu-37.1 {DrawTearoffEntry - can't do automatically} {} {}
test macMenu-38.1 {TkMacSetHelpMenuItemCount - called at boot time} {} {}
test macMenu-39.1 {TkMacMenuClick - can't do automatically} {} {}

test macMenu-40.1 {TkpDrawMenuEntry - gc for active and not strict motif} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    .m1 entryconfigure 1 -state active
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.2 {TkpDrawMenuEntry - gc for active menu item with its own gc} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -activeforeground red
    set tearoff [tkTearOffMenu .m1 40 40]
    .m1 entryconfigure 1 -state active
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.3 {TkpDrawMenuEntry - gc for active and strict motif} {
    catch {destroy .m1}
    menu .m1
    set tk_strictMotif 1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    .m1 entryconfigure 1 -state active
    list [update] [destroy .m1] [set tk_strictMotif 0]
} {{} {} 0}
test macMenu-40.4 {TkpDrawMenuEntry - gc for disabled with disabledfg and custom entry} {
    catch {destroy .m1}
    menu .m1 -disabledforeground blue
    .m1 add command -label foo -state disabled -background red
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.5 {TkpDrawMenuEntry - gc for disabled with disabledFg} {
    catch {destroy .m1}
    menu .m1 -disabledforeground blue
    .m1 add command -label foo -state disabled
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.6 {TkpDrawMenuEntry - gc for disabled - no disabledFg} {
    catch {destroy .m1}
    menu .m1 -disabledforeground ""
    .m1 add command -label foo -state disabled
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.7 {TkpDrawMenuEntry - gc for normal - custom entry} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -foreground red
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.8 {TkpDrawMenuEntry - gc for normal} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.9 {TkpDrawMenuEntry - gc for indicator - custom entry} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label foo -selectcolor orange
    .m1 invoke 1
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.10 {TkpDrawMenuEntry - gc for indicator} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label foo
    .m1 invoke 1
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.11 {TkpDrawMenuEntry - border - custom entry} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -activebackground green
    set tearoff [tkTearOffMenu .m1 40 40]
    .m1 entryconfigure 1 -state active
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.12 {TkpDrawMenuEntry - border} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    .m1 entryconfigure 1 -state active
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.13 {TkpDrawMenuEntry - active border - strict motif} {
    catch {destroy .m1}
    set tk_strictMotif 1
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    .m1 entryconfigure 1 -state active
    list [update] [destroy .m1] [set tk_strictMotif 0]
} {{} {} 0}
test macMenu-40.14 {TkpDrawMenuEntry - active border - custom entry} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -activeforeground yellow
    set tearoff [tkTearOffMenu .m1 40 40]
    .m1 entryconfigure 1 -state active
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.15 {TkpDrawMenuEntry - active border} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    .m1 entryconfigure 1 -state active
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.16 {TkpDrawMenuEntry - font - custom entry} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo -font "Helvectica 72"
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.17 {TkpDrawMenuEntry - font} {
    catch {destroy .m1}
    menu .m1 -font "Courier 72"
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.18 {TkpDrawMenuEntry - separator} {
    catch {destroy .m1}
    menu .m1
    .m1 add separator
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.19 {TkpDrawMenuEntry - standard} {
    catch {destroy .mb}
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.20 {TkpDrawMenuEntry - disabled cascade item} {
    catch {destroy .m1}
    menu .m1
    .m1 add cascade -label File -menu .m1.file
    menu .m1.file
    .m1.file add command -label foo
    .m1 entryconfigure File -state disabled
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.21 {TkpDrawMenuEntry - indicator} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label macMenu-40.20
    .m1 invoke 0
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-40.22 {TkpDrawMenuEntry - indicator - hideMargin} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label macMenu-40.21 -hidemargin 1
    .m1 invoke 0
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}

test macMenu-41.1 {TkpComputeStandardMenuGeometry - no entries} {
    catch {destroy .m1}
    menu .m1
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.2 {TkpComputeStandardMenuGeometry - one entry} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "one"
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.3 {TkpComputeStandardMenuGeometry - more than one entry} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "one"
    .m1 add command -label "two"
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.4 {TkpComputeStandardMenuGeometry - separator} {
    catch {destroy .m1}
    menu .m1
    .m1 add separator
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.5 {TkpComputeStandardMenuGeometry - standard label geometry} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "test"
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.6 {TkpComputeStandardMenuGeometry - different font for entry} {
    catch {destroy .m1}
    menu .m1 -font "Helvetica 12"
    .m1 add command -label "test" -font "Courier 12"
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.7 {TkpComputeStandardMenuGeometry - second entry larger} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "test"
    .m1 add command -label "test test"
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.8 {TkpComputeStandardMenuGeometry - first entry larger} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "test test"
    .m1 add command -label "test"
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.9 {TkpComputeStandardMenuGeometry - accelerator} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "test" -accel "Ctrl+S"
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.10 {TkpComputeStandardMenuGeometry - second accel larger} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "test" -accel "1"
    .m1 add command -label "test" -accel "1 1"
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.11 {TkpComputeStandardMenuGeometry - second accel smaller} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "test" -accel "1 1"
    .m1 add command -label "test" -accel "1"
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.12 {TkpComputeStandardMenuGeometry - indicator} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label test
    .m1 invoke 1
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.13 {TkpComputeStandardMenuGeometry - second indicator less or equal } {
    catch {destroy .m1}
    catch {image delete image1}
    image create test image1
    menu .m1
    .m1 add checkbutton -image image1
    .m1 invoke 1
    .m1 add checkbutton -label test
    .m1 invoke 2
    list [update idletasks] [destroy .m1] [image delete image1]
} {{} {} {}}
test macMenu-41.14 {TkpComputeStandardMenuGeometry - hidden margin} {
    catch {destroy .m1}
    menu .m1
    .m1 add checkbutton -label macMenu-41.15 -hidemargin 1
    .m1 invoke macMenu-41.15
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.15 {TkpComputeStandardMenuGeometry - zero sized menus} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.16 {TkpComputeStandardMenuGeometry - first column bigger} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label one
    .m1 add command -label two
    .m1 add command -label three -columnbreak 1
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.17 {TkpComputeStandardMenuGeometry - second column bigger} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add command -label one
    .m1 add command -label two -columnbreak 1
    .m1 add command -label three
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.18 {TkpComputeStandardMenuGeometry - three columns} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add command -label one
    .m1 add command -label two -columnbreak 1
    .m1 add command -label three
    .m1 add command -label four
    .m1 add command -label five -columnbreak 1
    .m1 add command -label six
    list [update idletasks] [destroy .m1]    
} {{} {}}
test macMenu-41.19 {TkpComputeStandardMenuGeometry - entry without accel long} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add command -label "This is a long item with no accel."
    .m1 add command -label foo -accel "Cmd+S"
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-41.20 {TkpComputeStandardMenuGeometry - entry with accel long} {
    catch {destroy .m1}
    menu .m1 -tearoff 0
    .m1 add command -label foo
    .m1 add command -label "This is a long label with an accel." -accel "Cmd+W"
    list [update idletasks] [destroy .m1]
} {{} {}}

test macMenu-42.1 {DrawMenuEntryLabel - setting indicatorSpace} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "foo"
    set tearoff [tkTearOffMenu .m1]
    list [update idletasks] [destroy .m1]    
} {{} {}}
test macMenu-42.2 {DrawMenuEntryLabel - drawing image} {
    catch {destroy .m1}
    catch {image delete image1}
    image create test image1
    menu .m1
    .m1 add command -image image1
    set tearoff [tkTearOffMenu .m1]
    list [update idletasks] [destroy .m1] [image delete image1]
} {{} {} {}}
test macMenu-42.3 {DrawMenuEntryLabel - drawing select image} {
    catch {destroy .m1}
    catch {eval image delete [image names]}
    image create test image1
    image create test image2
    menu .m1
    .m1 add checkbutton -image image1 -selectimage image2
    .m1 invoke 1
    set tearoff [tkTearOffMenu .m1]
    list [update idletasks] [destroy .m1] [eval image delete [image names]]
} {{} {} {}}
test macMenu-42.4 {DrawMenuEntryLabel - drawing a bitmap} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -bitmap questhead
    set tearoff [tkTearOffMenu .m1]
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-42.5 {DrawMenuEntryLabel - drawing null label} {
    catch {destroy .m1}
    menu .m1
    .m1 add command
    set tearoff [tkTearOffMenu .m1]
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-42.6 {DrawMenuEntryLabel - drawing real label} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "This is a long label" -underline 3
    set tearoff [tkTearOffMenu .m1]
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-42.7 {DrawMenuEntryLabel - drawing disabled label} {
	catch {destroy .m1}
	menu .m1 -disabledforeground ""
	.m1 add command -label "This is a long label" -state disabled
	set tearoff [tkTearOffMenu .m1]
	list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-42.8 {DrawMenuEntryLabel - disabled images} {
	catch {destroy .m1}
	catch {image delete image1}
	image create test image1
	menu .m1
	.m1 add command -image image1 -state disabled
	set tearoff [tkTearOffMenu .m1 100 100]
	list [update idletasks] [destroy .m1] [image delete image1]
} {{} {} {}}

test macMenu-43.1 {GetMenuLabelGeometry - image} {
    catch {destroy .m1}
    catch {image delete image1}
    menu .m1
    image create test image1
    .m1 add command -image image1
    list [update idletasks] [destroy .m1] [image delete image1]
} {{} {} {}}
test macMenu-43.2 {GetMenuLabelGeometry - bitmap} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -bitmap questhead
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-43.3 {GetMenuLabelGeometry - no text} {
    catch {destroy .m1}
    menu .m1
    .m1 add command
    list [update idletasks] [destroy .m1]
} {{} {}}
test macMenu-43.4 {GetMenuLabelGeometry - text} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label "This is a test."
    list [update idletasks] [destroy .m1]
} {{} {}}

test macMenu-44.1 {DrawMenuEntryBackground} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    list [update] [destroy .m1]
} {{} {}}
test macMenu-44.2 {DrawMenuEntryBackground} {
    catch {destroy .m1}
    menu .m1
    .m1 add command -label foo
    set tearoff [tkTearOffMenu .m1 40 40]
    $tearoff activate 0
    list [update] [destroy .m1]
} {{} {}}

test macMenu-45.1 {TkpMenuInit - called at boot time} {} {}

# cleanup
deleteWindows
::tcltest::cleanupTests
return













