URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [insight/] [tcl/] [tests/] [event.test] - Rev 1765
Compare with Previous | Blame | View Log
# This file contains a collection of tests for the procedures in the file# tclEvent.c, which includes the "update", and "vwait" Tcl# commands. Sourcing this file into Tcl runs the tests and generates# output for errors. No output means no errors were found.## Copyright (c) 1995-1997 Sun Microsystems, Inc.## See the file "license.terms" for information on usage and redistribution# of this file, and for a DISCLAIMER OF ALL WARRANTIES.## RCS: @(#) $Id: event.test,v 1.1.1.1 2002-01-16 10:25:35 markom Exp $if {[string compare test [info procs test]] == 1} then {source defs}if {[catch {testfilehandler create 0 off off}] == 0 } {test event-1.1 {Tcl_CreateFileHandler, reading} {testfilehandler closetestfilehandler create 0 readable offtestfilehandler clear 0testfilehandler oneeventset result ""lappend result [testfilehandler counts 0]testfilehandler fillpartial 0testfilehandler oneeventlappend result [testfilehandler counts 0]testfilehandler oneeventlappend result [testfilehandler counts 0]testfilehandler closeset result} {{0 0} {1 0} {2 0}}test event-1.2 {Tcl_CreateFileHandler, writing} {nonPortable} {# This test is non-portable because on some systems (e.g.# SunOS 4.1.3) pipes seem to be writable always.testfilehandler closetestfilehandler create 0 off writabletestfilehandler clear 0testfilehandler oneeventset result ""lappend result [testfilehandler counts 0]testfilehandler fillpartial 0testfilehandler oneeventlappend result [testfilehandler counts 0]testfilehandler fill 0testfilehandler oneeventlappend result [testfilehandler counts 0]testfilehandler closeset result} {{0 1} {0 2} {0 2}}test event-1.3 {Tcl_DeleteFileHandler} {nonPortable} {testfilehandler closetestfilehandler create 2 disabled disabledtestfilehandler create 1 readable writabletestfilehandler create 0 disabled disabledtestfilehandler fillpartial 1set result ""testfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler create 1 off offtestfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler closeset result} {{0 1} {1 1} {1 2} {0 0}}test event-2.1 {Tcl_DeleteFileHandler} {nonPortable} {testfilehandler closetestfilehandler create 2 disabled disabledtestfilehandler create 1 readable writabletestfilehandler fillpartial 1set result ""testfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler create 1 off offtestfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler closeset result} {{0 1} {1 1} {1 2} {0 0}}test event-2.2 {Tcl_DeleteFileHandler, fd reused & events still pending} {nonPortable} {testfilehandler closetestfilehandler create 0 readable writabletestfilehandler fillpartial 0set result ""testfilehandler oneeventlappend result [testfilehandler counts 0]testfilehandler closetestfilehandler create 0 readable writabletestfilehandler oneeventlappend result [testfilehandler counts 0]testfilehandler closeset result} {{0 1} {0 0}}test event-3.1 {FileHandlerCheckProc, TCL_FILE_EVENTS off } {testfilehandler closetestfilehandler create 1 readable writabletestfilehandler fillpartial 1testfilehandler windoweventset result [testfilehandler counts 1]testfilehandler closeset result} {0 0}test event-4.1 {FileHandlerEventProc, race between event and disabling} {nonPortable} {updatetestfilehandler closetestfilehandler create 2 disabled disabledtestfilehandler create 1 readable writabletestfilehandler fillpartial 1set result ""testfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler create 1 disabled disabledtestfilehandler oneeventlappend result [testfilehandler counts 1]testfilehandler closeset result} {{0 1} {1 1} {1 2} {0 0}}test event-4.2 {FileHandlerEventProc, TCL_FILE_EVENTS off} {nonPortable} {updatetestfilehandler closetestfilehandler create 1 readable writabletestfilehandler create 2 readable writabletestfilehandler fillpartial 1testfilehandler fillpartial 2testfilehandler oneeventset result ""lappend result [testfilehandler counts 1] [testfilehandler counts 2]testfilehandler windoweventlappend result [testfilehandler counts 1] [testfilehandler counts 2]testfilehandler closeset result} {{0 0} {0 1} {0 0} {0 1}}testfilehandler closeupdate}test event-5.1 {Tcl_BackgroundError, HandleBgErrors procedures} {catch {rename bgerror {}}proc bgerror msg {global errorInfo errorCode xlappend x [list $msg $errorInfo $errorCode]}after idle {error "a simple error"}after idle {open non_existent}after idle {set errorInfo foobar; set errorCode xyzzy}set x {}update idletasksrename bgerror {}set x} {{{a simple error} {a simple errorwhile executing"error "a simple error""("after" script)} NONE} {{couldn't open "non_existent": no such file or directory} {couldn't open "non_existent": no such file or directorywhile executing"open non_existent"("after" script)} {POSIX ENOENT {no such file or directory}}}}test event-5.2 {Tcl_BackgroundError, HandleBgErrors procedures} {catch {rename bgerror {}}proc bgerror msg {global xlappend x $msgreturn -code break}after idle {error "a simple error"}after idle {open non_existent}set x {}update idletasksrename bgerror {}set x} {{a simple error}}test event-6.1 {BgErrorDeleteProc procedure} {catch {interp delete foo}interp create foofoo eval {proc bgerror args {global errorInfoset f [open err.out r+]seek $f 0 endputs $f "$args $errorInfo"close $f}after 100 {error "first error"}after 100 {error "second error"}}makeFile Unmodified err.outafter 100 {interp delete foo}after 200updateset f [open err.out r]set result [read $f]close $fremoveFile err.outset result} {Unmodified}test event-7.1 {bgerror / regular} {set errRes {}proc bgerror {err} {global errRes;set errRes $err;}after 0 {error err1}vwait errRes;set errRes;} err1test event-7.2 {bgerror / accumulation} {set errRes {}proc bgerror {err} {global errRes;lappend errRes $err;}after 0 {error err1}after 0 {error err2}after 0 {error err3}updateset errRes;} {err1 err2 err3}test event-7.3 {bgerror / accumulation / break} {set errRes {}proc bgerror {err} {global errRes;lappend errRes $err;return -code break "skip!";}after 0 {error err1}after 0 {error err2}after 0 {error err3}updateset errRes;} err1test event-7.4 {tkerror is nothing special anymore to tcl} {set errRes {}# we don't just rename bgerror to empty because it could then# be autoloaded...proc bgerror {err} {global errRes;lappend errRes "bg:$err";}proc tkerror {err} {global errRes;lappend errRes "tk:$err";}after 0 {error err1}updaterename tkerror {}set errRes} bg:err1# someday : add a test checking that# when there is no bgerror, an error msg goes to stderr# ideally one would use sub interp and transfer a fake stderr# to it, unfortunatly the current interp tcl API does not allow# that. the other option would be to use fork a test but it# then becomes more a file/exec test than a bgerror test.# end of bgerror testscatch {rename bgerror {}}if {[info commands testexithandler] != ""} {test event-8.1 {Tcl_CreateExitHandler procedure} {stdio} {set child [open |[list [info nameofexecutable]] r+]puts $child "testexithandler create 41; testexithandler create 4"puts $child "testexithandler create 6; exit"flush $childset result [read $child]close $childset result} {even 6even 4odd 41}test event-9.1 {Tcl_DeleteExitHandler procedure} {stdio} {set child [open |[list [info nameofexecutable]] r+]puts $child "testexithandler create 41; testexithandler create 4"puts $child "testexithandler create 6; testexithandler delete 41"puts $child "testexithandler create 16; exit"flush $childset result [read $child]close $childset result} {even 16even 6even 4}test event-9.2 {Tcl_DeleteExitHandler procedure} {stdio} {set child [open |[list [info nameofexecutable]] r+]puts $child "testexithandler create 41; testexithandler create 4"puts $child "testexithandler create 6; testexithandler delete 4"puts $child "testexithandler create 16; exit"flush $childset result [read $child]close $childset result} {even 16even 6odd 41}test event-9.3 {Tcl_DeleteExitHandler procedure} {stdio} {set child [open |[list [info nameofexecutable]] r+]puts $child "testexithandler create 41; testexithandler create 4"puts $child "testexithandler create 6; testexithandler delete 6"puts $child "testexithandler create 16; exit"flush $childset result [read $child]close $childset result} {even 16even 4odd 41}test event-9.4 {Tcl_DeleteExitHandler procedure} {stdio} {set child [open |[list [info nameofexecutable]] r+]puts $child "testexithandler create 41; testexithandler delete 41"puts $child "testexithandler create 16; exit"flush $childset result [read $child]close $childset result} {even 16}}test event-10.1 {Tcl_Exit procedure} {stdio} {set child [open |[list [info nameofexecutable]] r+]puts $child "exit 3"list [catch {close $child} msg] $msg [lindex $errorCode 0] \[lindex $errorCode 2]} {1 {child process exited abnormally} CHILDSTATUS 3}test event-11.1 {Tcl_VwaitCmd procedure} {list [catch {vwait} msg] $msg} {1 {wrong # args: should be "vwait name"}}test event-11.2 {Tcl_VwaitCmd procedure} {list [catch {vwait a b} msg] $msg} {1 {wrong # args: should be "vwait name"}}test event-11.3 {Tcl_VwaitCmd procedure} {catch {unset x}set x 1list [catch {vwait x(1)} msg] $msg} {1 {can't trace "x(1)": variable isn't array}}test event-11.4 {Tcl_VwaitCmd procedure} {foreach i [after info] {after cancel $i}after 10; update; # On Mac make sure update won't take longafter 100 {set x x-done}after 200 {set y y-done}after 300 {set z z-done}after idle {set q q-done}set x beforeset y beforeset z beforeset q beforelist [vwait y] $x $y $z $q} {{} x-done y-done before q-done}foreach i [after info] {after cancel $i}test event-11.5 {Tcl_VwaitCmd procedure: round robin scheduling, 2 sources} {socket} {set f1 [open test1 w]proc accept {s args} {puts $s foobarclose $s}set s1 [socket -server accept 5001]set s2 [socket 127.0.0.1 5001]close $s1set x 0set y 0set z 0fileevent $s2 readable { incr z }vwait zfileevent $f1 writable { incr x; if { $y == 3 } { set z done } }fileevent $s2 readable { incr y; if { $x == 3 } { set z done } }vwait zclose $f1close $s2file delete test1 test2list $x $y $z} {3 3 done}test event-11.6 {Tcl_VwaitCmd procedure: round robin scheduling, same source} {file delete test1 test2set f1 [open test1 w]set f2 [open test2 w]set x 0set y 0set z 0updatefileevent $f1 writable { incr x; if { $y == 3 } { set z done } }fileevent $f2 writable { incr y; if { $x == 3 } { set z done } }vwait zclose $f1close $f2file delete test1 test2list $x $y $z} {3 3 done}test event-12.1 {Tcl_UpdateCmd procedure} {list [catch {update a b} msg] $msg} {1 {wrong # args: should be "update ?idletasks?"}}test event-12.2 {Tcl_UpdateCmd procedure} {list [catch {update bogus} msg] $msg} {1 {bad option "bogus": must be idletasks}}test event-12.3 {Tcl_UpdateCmd procedure} {foreach i [after info] {after cancel $i}after 500 {set x after}after idle {set y after}after idle {set z "after, y = $y"}set x beforeset y beforeset z beforeupdate idletaskslist $x $y $z} {before after {after, y = after}}test event-12.4 {Tcl_UpdateCmd procedure} {foreach i [after info] {after cancel $i}after 10; update; # On Mac make sure update won't take longafter 200 {set x x-done}after 600 {set y y-done}after idle {set z z-done}set x beforeset y beforeset z beforeafter 300updatelist $x $y $z} {x-done before z-done}if {[info commands testfilehandler] != ""} {test event-13.1 {Tcl_WaitForFile procedure, readable} unixOnly {foreach i [after info] {after cancel $i}after 100 set x timeouttestfilehandler closetestfilehandler create 1 off offset x "no timeout"set result [testfilehandler wait 1 readable 0]updatetestfilehandler closelist $result $x} {{} {no timeout}}test event-13.2 {Tcl_WaitForFile procedure, readable} unixOnly {foreach i [after info] {after cancel $i}after 100 set x timeouttestfilehandler closetestfilehandler create 1 off offset x "no timeout"set result [testfilehandler wait 1 readable 100]updatetestfilehandler closelist $result $x} {{} timeout}test event-13.3 {Tcl_WaitForFile procedure, readable} unixOnly {foreach i [after info] {after cancel $i}after 100 set x timeouttestfilehandler closetestfilehandler create 1 off offtestfilehandler fillpartial 1set x "no timeout"set result [testfilehandler wait 1 readable 100]updatetestfilehandler closelist $result $x} {readable {no timeout}}test event-13.4 {Tcl_WaitForFile procedure, writable} {unixOnly nonPortable} {foreach i [after info] {after cancel $i}after 100 set x timeouttestfilehandler closetestfilehandler create 1 off offtestfilehandler fill 1set x "no timeout"set result [testfilehandler wait 1 writable 0]updatetestfilehandler closelist $result $x} {{} {no timeout}}test event-13.5 {Tcl_WaitForFile procedure, writable} {unixOnly nonPortable} {foreach i [after info] {after cancel $i}after 100 set x timeouttestfilehandler closetestfilehandler create 1 off offtestfilehandler fill 1set x "no timeout"set result [testfilehandler wait 1 writable 100]updatetestfilehandler closelist $result $x} {{} timeout}test event-13.6 {Tcl_WaitForFile procedure, writable} unixOnly {foreach i [after info] {after cancel $i}after 100 set x timeouttestfilehandler closetestfilehandler create 1 off offset x "no timeout"set result [testfilehandler wait 1 writable 100]updatetestfilehandler closelist $result $x} {writable {no timeout}}test event-13.7 {Tcl_WaitForFile procedure, don't call other event handlers} unixOnly {foreach i [after info] {after cancel $i}after 100 lappend x timeoutafter idle lappend x idletestfilehandler closetestfilehandler create 1 off offset x ""set result [list [testfilehandler wait 1 readable 200] $x]updatetestfilehandler closelappend result $x} {{} {} {timeout idle}}}if {[info commands testfilewait] != ""} {test event-13.8 {Tcl_WaitForFile procedure, waiting indefinitely} unixOnly {set f [open "|sleep 2" r]set result ""lappend result [testfilewait $f readable 100]lappend result [testfilewait $f readable -1]close $fset result} {{} readable}}foreach i [after info] {after cancel $i}
