# This file is a Tcl script to test out the procedures in the file 
# tkMacEmbed.c.  It is organized in the standard fashion for Tcl
# tests.
#
# Copyright (c) 1997 Sun Microsystems, Inc.
# Copyright (c) 1998-1999 by Scriptics Corporation.
# All rights reserved.
#
# RCS: @(#) $Id: macEmbed.test,v 1.5 2001/03/28 17:27:10 dgp Exp $

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

eval destroy [winfo children .]
wm geometry . {}
raise .


test macEmbed-1.1 {TkpUseWindow procedure, bad window identifier} {macOnly} {
    catch {destroy .t}
    list [catch {toplevel .t -use xyz} msg] $msg
} {1 {expected integer but got "xyz"}}
test macEmbed-1.2 {TkpUseWindow procedure, bad window identifier} {macOnly} {
    catch {destroy .t}
    list [catch {toplevel .t -use 47} msg] $msg
} {1 {The window ID 47 does not correspond to a valid Tk Window.}}

if {[string compare testembed [info commands testembed]] != 0} {
    puts "This application hasn't been compiled with the testembed command,"
    puts "therefore I am skipping all of these tests."
    ::tcltest::cleanupTests
    return
}

test macEmbed-1.3 {TkpUseWindow procedure, creating Container records} {macOnly} {
    eval destroy [winfo child .]
    frame .f1 -container 1 -width 200 -height 50
    frame .f2 -container 1 -width 200 -height 50
    pack .f1 .f2
    set w [winfo id .f1]
	toplevel .t -use $w
	list [testembed] [expr [lindex [lindex [testembed all] 1] 0] - $w]
} {{{XXX .f2 {} {}} {XXX .f1 XXX .t}} 0}
test macEmbed-1.4 {TkpUseWindow procedure, creating Container records} {macOnly} {
    eval destroy [winfo child .]
    frame .f1 -container 1 -width 200 -height 50
    frame .f2 -container 1 -width 200 -height 50
    pack .f1 .f2
    set w1 [winfo id .f1]
    set w2 [winfo id .f2]
	toplevel .t1 -use $w1
	toplevel .t2 -use $w2
	testembed
} {{XXX .f2 XXX .t2} {XXX .f1 XXX .t1}}

# Can't think of any way to test the procedures TkpMakeWindow,
# TkpMakeContainer, or EmbedErrorProc.

test macEmbed-2.1 {EmbeddedEventProc procedure} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    set w1 [winfo id .f1]
	toplevel .t1 -use $w1
	testembed
    destroy .t1
    update
	testembed
} {}
test macEmbed-2.2 {EmbeddedEventProc procedure} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    toplevel .t1 -use [winfo id .f1]
    update
    destroy .f1
    testembed
} {}
test macEmbed-2.3 {EmbeddedEventProc procedure} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    toplevel .t1 -use [winfo id .f1]
    update
    destroy .t1
    update
    list [testembed] [winfo children .]
} {{} {}}

test macEmbed-3.1 {EmbeddedEventProc procedure, detect creation} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    set w1 [winfo id .f1]
    set x [testembed]
	toplevel .t1 -use $w1
	wm withdraw .t1
    list $x [testembed]
} {{{XXX .f1 {} {}}} {{XXX .f1 XXX .t1}}}
test macEmbed-3.2 {EmbeddedEventProc procedure, disallow position changes} \
	{macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    set w1 [winfo id .f1]
	toplevel .t1 -use $w1 -bd 2 -relief raised
	update
	wm geometry .t1 +30+40
    update
	wm geometry .t1
} {200x200+0+0}
test macEmbed-3.3 {EmbeddedEventProc procedure, disallow position changes} \
	{macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    set w1 [winfo id .f1]
	toplevel .t1 -use $w1
	update
	wm geometry .t1 300x100+30+40
    update
	wm geometry .t1
} {300x100+0+0}
test macEmbed-3.4 {EmbeddedEventProc procedure, geometry requests} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    toplevel .t1 -container 1 -width 200 -height 50
    set w1 [winfo id .t1]
	toplevel .t2 -use $w1
    update
	.t1 configure -width 300 -height 80
    update
    list [winfo width .t1] [winfo height .t1] [wm geometry .t2]
} {300 80 300x80+0+0}
test macEmbed-3.5 {EmbeddedEventProc procedure, map requests} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    set w1 [winfo id .f1]
	toplevel .t1 -use $w1
	set x unmapped
	bind .t1 <Map> {set x mapped}
    update
	after 100
	update
	set x
} {mapped}
test macEmbed-3.6 {EmbeddedEventProc procedure, destroy events} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    set w1 [winfo id .f1]
    bind .f1 <Destroy> {set x dead}
    set x alive
	toplevel .t1 -use $w1
    update
	destroy .t1
    update
    list $x [winfo exists .f1]
} {dead 0}

test macEmbed-4.1 {EmbedStructureProc procedure, configure events} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    set w1 [winfo id .f1]
	toplevel .t1 -use $w1
    update
	.t1 configure -width 180 -height 100
    update
	winfo geometry .t1
} {180x100+0+0}
test macEmbed-4.2 {EmbedStructureProc procedure, destroy events} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    set w1 [winfo id .f1]
	toplevel .t1 -use $w1
    update
    set x [testembed]
    destroy .f1
    list $x [testembed]
} {{{XXX .f1 XXX .t1}} {}}

# Can't think up any tests for TkpGetOtherWindow procedure.

test unixEmbed-5.1 {TkpClaimFocus procedure} {macOnly tempNotMac} {
    catch {interp delete child}
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    frame .f2 -width 200 -height 50
    pack .f1 .f2
    interp create child
    child eval "set argv {-use [winfo id .f1]}"
    load {} Tk child
    child eval {
	. configure -bd 2 -highlightthickness 2 -relief sunken
    }
    focus -force .f2
    update
    list [child eval {
	focus .
	set x [list [focus]]
	update
	lappend x [focus]
    }] [focus]
} {{{} .} .f1}
catch {interp delete child}

test macEmbed-6.1 {EmbedWindowDeleted procedure, check parentPtr} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    frame .f2 -container 1 -width 200 -height 50
    frame .f3 -container 1 -width 200 -height 50
    frame .f4 -container 1 -width 200 -height 50
    pack .f1 .f2 .f3 .f4
    set x {}
    lappend x [testembed]
    foreach w {.f3 .f4 .f1 .f2} {
	destroy $w
	lappend x [testembed]
    }
    set x
} {{{XXX .f4 {} {}} {XXX .f3 {} {}} {XXX .f2 {} {}} {XXX .f1 {} {}}} {{XXX .f4 {} {}} {XXX .f2 {} {}} {XXX .f1 {} {}}} {{XXX .f2 {} {}} {XXX .f1 {} {}}} {{XXX .f2 {} {}}} {}}
test macEmbed-6.2 {EmbedWindowDeleted procedure, check embeddedPtr} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    set w1 [winfo id .f1]
	toplevel .t1 -use $w1 -highlightthickness 2 -bd 2 -relief sunken
	set x {}
	lappend x [testembed]
	destroy .t1
	update
	lappend x [testembed]
} {{{XXX .f1 XXX .t1}} {}}

test macEmbed-7.1 {geometry propagation in tkUnixWm.c/UpdateGeometryInfo} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    toplevel .t1 -use [winfo id .f1] -width 150 -height 80
    update
    wm geometry .t1 +40+50
    update
    wm geometry .t1
} {150x80+0+0}
test macEmbed-7.2 {geometry propagation in tkUnixWm.c/UpdateGeometryInfo} {macOnly} {
    foreach w [winfo child .] {
	catch {destroy $w}
    }
    frame .f1 -container 1 -width 200 -height 50
    pack .f1
    toplevel .t1 -use [winfo id .f1] -width 150 -height 80
    update
    wm geometry .t1 70x300+10+20
    update
    wm geometry .t1
} {70x300+0+0}



foreach w [winfo child .] {
    catch {destroy $w}
}

# cleanup
::tcltest::cleanupTests
return













