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

通讯编程

开发平台:

Visual C++

  1. # This file contains a collection of tests for the procedures in the file
  2. # tclEvent.c, which includes the "update", and "vwait" Tcl
  3. # commands.  Sourcing this file into Tcl runs the tests and generates
  4. # output for errors.  No output means no errors were found.
  5. #
  6. # Copyright (c) 1995-1997 Sun Microsystems, Inc.
  7. # Copyright (c) 1998-1999 by Scriptics Corporation.
  8. #
  9. # See the file "license.terms" for information on usage and redistribution
  10. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  11. #
  12. # RCS: @(#) $Id: event.test,v 1.20.2.1 2006/11/28 16:29:47 kennykb Exp $
  13. package require tcltest 2
  14. namespace import -force ::tcltest::*
  15. testConstraint testfilehandler [llength [info commands testfilehandler]]
  16. testConstraint testexithandler [llength [info commands testexithandler]]
  17. testConstraint testfilewait [llength [info commands testfilewait]]
  18. test event-1.1 {Tcl_CreateFileHandler, reading} {testfilehandler} {
  19.     testfilehandler close
  20.     testfilehandler create 0 readable off
  21.     testfilehandler clear 0
  22.     testfilehandler oneevent
  23.     set result ""
  24.     lappend result [testfilehandler counts 0]
  25.     testfilehandler fillpartial 0
  26.     testfilehandler oneevent
  27.     lappend result [testfilehandler counts 0]
  28.     testfilehandler oneevent
  29.     lappend result [testfilehandler counts 0]
  30.     testfilehandler close
  31.     set result
  32. } {{0 0} {1 0} {2 0}}
  33. test event-1.2 {Tcl_CreateFileHandler, writing} {testfilehandler nonPortable} {
  34.     # This test is non-portable because on some systems (e.g.
  35.     # SunOS 4.1.3) pipes seem to be writable always.
  36.     testfilehandler close
  37.     testfilehandler create 0 off writable
  38.     testfilehandler clear 0
  39.     testfilehandler oneevent
  40.     set result ""
  41.     lappend result [testfilehandler counts 0]
  42.     testfilehandler fillpartial 0
  43.     testfilehandler oneevent
  44.     lappend result [testfilehandler counts 0]
  45.     testfilehandler fill 0
  46.     testfilehandler oneevent
  47.     lappend result [testfilehandler counts 0]
  48.     testfilehandler close
  49.     set result
  50. } {{0 1} {0 2} {0 2}}
  51. test event-1.3 {Tcl_DeleteFileHandler} {testfilehandler nonPortable} {
  52.     testfilehandler close
  53.     testfilehandler create 2 disabled disabled
  54.     testfilehandler create 1 readable writable
  55.     testfilehandler create 0 disabled disabled
  56.     testfilehandler fillpartial 1
  57.     set result ""
  58.     testfilehandler oneevent
  59.     lappend result [testfilehandler counts 1]
  60.     testfilehandler oneevent
  61.     lappend result [testfilehandler counts 1]
  62.     testfilehandler oneevent
  63.     lappend result [testfilehandler counts 1]
  64.     testfilehandler create 1 off off
  65.     testfilehandler oneevent
  66.     lappend result [testfilehandler counts 1]
  67.     testfilehandler close
  68.     set result
  69. } {{0 1} {1 1} {1 2} {0 0}}
  70. test event-2.1 {Tcl_DeleteFileHandler} {testfilehandler nonPortable} {
  71.     testfilehandler close
  72.     testfilehandler create 2 disabled disabled
  73.     testfilehandler create 1 readable writable
  74.     testfilehandler fillpartial 1
  75.     set result ""
  76.     testfilehandler oneevent
  77.     lappend result [testfilehandler counts 1]
  78.     testfilehandler oneevent
  79.     lappend result [testfilehandler counts 1]
  80.     testfilehandler oneevent
  81.     lappend result [testfilehandler counts 1]
  82.     testfilehandler create 1 off off
  83.     testfilehandler oneevent
  84.     lappend result [testfilehandler counts 1]
  85.     testfilehandler close
  86.     set result
  87. } {{0 1} {1 1} {1 2} {0 0}}
  88. test event-2.2 {Tcl_DeleteFileHandler, fd reused & events still pending} 
  89. {testfilehandler nonPortable} {
  90.     testfilehandler close
  91.     testfilehandler create 0 readable writable
  92.     testfilehandler fillpartial 0
  93.     set result ""
  94.     testfilehandler oneevent
  95.     lappend result [testfilehandler counts 0]
  96.     testfilehandler close
  97.     testfilehandler create 0 readable writable
  98.     testfilehandler oneevent
  99.     lappend result [testfilehandler counts 0]
  100.     testfilehandler close
  101.     set result
  102. } {{0 1} {0 0}}
  103. test event-3.1 {FileHandlerCheckProc, TCL_FILE_EVENTS off } {testfilehandler} {
  104.     testfilehandler close
  105.     testfilehandler create 1 readable writable
  106.     testfilehandler fillpartial 1
  107.     testfilehandler windowevent
  108.     set result [testfilehandler counts 1]
  109.     testfilehandler close
  110.     set result
  111. } {0 0}
  112. test event-4.1 {FileHandlerEventProc, race between event and disabling} 
  113. {testfilehandler nonPortable} {
  114.     update
  115.     testfilehandler close
  116.     testfilehandler create 2 disabled disabled
  117.     testfilehandler create 1 readable writable
  118.     testfilehandler fillpartial 1
  119.     set result ""
  120.     testfilehandler oneevent
  121.     lappend result [testfilehandler counts 1]
  122.     testfilehandler oneevent
  123.     lappend result [testfilehandler counts 1]
  124.     testfilehandler oneevent
  125.     lappend result [testfilehandler counts 1]
  126.     testfilehandler create 1 disabled disabled
  127.     testfilehandler oneevent
  128.     lappend result [testfilehandler counts 1]
  129.     testfilehandler close
  130.     set result
  131. } {{0 1} {1 1} {1 2} {0 0}}
  132. test event-4.2 {FileHandlerEventProc, TCL_FILE_EVENTS off} 
  133. {testfilehandler nonPortable} {
  134.     update
  135.     testfilehandler close
  136.     testfilehandler create 1 readable writable
  137.     testfilehandler create 2 readable writable
  138.     testfilehandler fillpartial 1
  139.     testfilehandler fillpartial 2
  140.     testfilehandler oneevent
  141.     set result ""
  142.     lappend result [testfilehandler counts 1] [testfilehandler counts 2]
  143.     testfilehandler windowevent
  144.     lappend result [testfilehandler counts 1] [testfilehandler counts 2]
  145.     testfilehandler close
  146.     set result
  147. } {{0 0} {0 1} {0 0} {0 1}}
  148. update
  149. test event-5.1 {Tcl_BackgroundError, HandleBgErrors procedures} {
  150.     catch {rename bgerror {}}
  151.     proc bgerror msg {
  152. global errorInfo errorCode x
  153. lappend x [list $msg $errorInfo $errorCode]
  154.     }
  155.     after idle {error "a simple error"}
  156.     after idle {open non_existent}
  157.     after idle {set errorInfo foobar; set errorCode xyzzy}
  158.     set x {}
  159.     update idletasks
  160.     rename bgerror {}
  161.     regsub -all [file join {} non_existent] $x "non_existent" x
  162.     set x
  163. } {{{a simple error} {a simple error
  164.     while executing
  165. "error "a simple error""
  166.     ("after" script)} NONE} {{couldn't open "non_existent": no such file or directory} {couldn't open "non_existent": no such file or directory
  167.     while executing
  168. "open non_existent"
  169.     ("after" script)} {POSIX ENOENT {no such file or directory}}}}
  170. test event-5.2 {Tcl_BackgroundError, HandleBgErrors procedures} {
  171.     catch {rename bgerror {}}
  172.     proc bgerror msg {
  173. global x
  174. lappend x $msg
  175. return -code break
  176.     }
  177.     after idle {error "a simple error"}
  178.     after idle {open non_existent}
  179.     set x {}
  180.     update idletasks
  181.     rename bgerror {}
  182.     set x
  183. } {{a simple error}}
  184. test event-6.1 {BgErrorDeleteProc procedure} {
  185.     catch {interp delete foo}
  186.     interp create foo
  187.     set erroutfile [makeFile Unmodified err.out]
  188.     foo eval [list set erroutfile $erroutfile]
  189.     foo eval {
  190. proc bgerror args {
  191.     global errorInfo erroutfile
  192.     set f [open $erroutfile r+]
  193.     seek $f 0 end
  194.     puts $f "$args $errorInfo"
  195.     close $f
  196. }
  197. after 100 {error "first error"}
  198. after 100 {error "second error"}
  199.     }
  200.     after 100 {interp delete foo}
  201.     after 200
  202.     update
  203.     set f [open $erroutfile r]
  204.     set result [read $f]
  205.     close $f
  206.     removeFile $erroutfile
  207.     set result
  208. } {Unmodified
  209. }
  210. test event-7.1 {bgerror / regular} {
  211.     set errRes {}
  212.     proc bgerror {err} {
  213. global errRes;
  214. set errRes $err;
  215.     }
  216.     after 0 {error err1}
  217.     vwait errRes;
  218.     set errRes;
  219. } err1
  220. test event-7.2 {bgerror / accumulation} {
  221.     set errRes {}
  222.     proc bgerror {err} {
  223. global errRes;
  224. lappend errRes $err;
  225.     }
  226.     after 0 {error err1}
  227.     after 0 {error err2}
  228.     after 0 {error err3}
  229.     update
  230.     set errRes;
  231. } {err1 err2 err3}
  232. test event-7.3 {bgerror / accumulation / break} {
  233.     set errRes {}
  234.     proc bgerror {err} {
  235. global errRes;
  236. lappend errRes $err;
  237. return -code break "skip!";
  238.     }
  239.     after 0 {error err1}
  240.     after 0 {error err2}
  241.     after 0 {error err3}
  242.     update
  243.     set errRes;
  244. } err1
  245. test event-7.4 {tkerror is nothing special anymore to tcl} {
  246.     set errRes {}
  247.     # we don't just rename bgerror to empty because it could then
  248.     # be autoloaded...
  249.     proc bgerror {err} {
  250. global errRes;
  251. lappend errRes "bg:$err";
  252.     }
  253.     proc tkerror {err} {
  254. global errRes;
  255. lappend errRes "tk:$err";
  256.     }
  257.     after 0 {error err1}
  258.     update
  259.     rename tkerror {}
  260.     set errRes
  261. } bg:err1
  262. testConstraint exec [llength [info commands exec]]
  263. test event-7.5 {correct behaviour when there is no bgerror [Bug 219142]} {exec} {
  264.     set script {
  265. after 1000 error hello
  266. after 2000 set a 0
  267. vwait a
  268.     }
  269.     list [catch {exec [interpreter] << $script} errMsg] $errMsg
  270. } {1 {hello
  271.     while executing
  272. "error hello"
  273.     ("after" script)}}
  274. # someday : add a test checking that 
  275. # when there is no bgerror, an error msg goes to stderr
  276. # ideally one would use sub interp and transfer a fake stderr
  277. # to it, unfortunatly the current interp tcl API does not allow
  278. # that. the other option would be to use fork a test but it
  279. # then becomes more a file/exec test than a bgerror test.
  280. # end of bgerror tests
  281. catch {rename bgerror {}}
  282. test event-8.1 {Tcl_CreateExitHandler procedure} {stdio testexithandler} {
  283.     set child [open |[list [interpreter]] r+]
  284.     puts $child "testexithandler create 41; testexithandler create 4"
  285.     puts $child "testexithandler create 6; exit"
  286.     flush $child
  287.     set result [read $child]
  288.     close $child
  289.     set result
  290. } {even 6
  291. even 4
  292. odd 41
  293. }
  294. test event-9.1 {Tcl_DeleteExitHandler procedure} {stdio testexithandler} {
  295.     set child [open |[list [interpreter]] r+]
  296.     puts $child "testexithandler create 41; testexithandler create 4"
  297.     puts $child "testexithandler create 6; testexithandler delete 41"
  298.     puts $child "testexithandler create 16; exit"
  299.     flush $child
  300.     set result [read $child]
  301.     close $child
  302.     set result
  303. } {even 16
  304. even 6
  305. even 4
  306. }
  307. test event-9.2 {Tcl_DeleteExitHandler procedure} {stdio testexithandler} {
  308.     set child [open |[list [interpreter]] r+]
  309.     puts $child "testexithandler create 41; testexithandler create 4"
  310.     puts $child "testexithandler create 6; testexithandler delete 4"
  311.     puts $child "testexithandler create 16; exit"
  312.     flush $child
  313.     set result [read $child]
  314.     close $child
  315.     set result
  316.     } {even 16
  317. even 6
  318. odd 41
  319. }
  320. test event-9.3 {Tcl_DeleteExitHandler procedure} {stdio testexithandler} {
  321.     set child [open |[list [interpreter]] r+]
  322.     puts $child "testexithandler create 41; testexithandler create 4"
  323.     puts $child "testexithandler create 6; testexithandler delete 6"
  324.     puts $child "testexithandler create 16; exit"
  325.     flush $child
  326.     set result [read $child]
  327.     close $child
  328.     set result
  329. } {even 16
  330. even 4
  331. odd 41
  332. }
  333. test event-9.4 {Tcl_DeleteExitHandler procedure} {stdio testexithandler} {
  334.     set child [open |[list [interpreter]] r+]
  335.     puts $child "testexithandler create 41; testexithandler delete 41"
  336.     puts $child "testexithandler create 16; exit"
  337.     flush $child
  338.     set result [read $child]
  339.     close $child
  340.     set result
  341. } {even 16
  342. }
  343. test event-10.1 {Tcl_Exit procedure} {stdio} {
  344.     set child [open |[list [interpreter]] r+]
  345.     puts $child "exit 3"
  346.     list [catch {close $child} msg] $msg [lindex $errorCode 0] 
  347.         [lindex $errorCode 2]
  348. } {1 {child process exited abnormally} CHILDSTATUS 3}
  349. test event-11.1 {Tcl_VwaitCmd procedure} {
  350.     list [catch {vwait} msg] $msg
  351. } {1 {wrong # args: should be "vwait name"}}
  352. test event-11.2 {Tcl_VwaitCmd procedure} {
  353.     list [catch {vwait a b} msg] $msg
  354. } {1 {wrong # args: should be "vwait name"}}
  355. test event-11.3 {Tcl_VwaitCmd procedure} {
  356.     catch {unset x}
  357.     set x 1
  358.     list [catch {vwait x(1)} msg] $msg
  359. } {1 {can't trace "x(1)": variable isn't array}}
  360. test event-11.4 {Tcl_VwaitCmd procedure} {} {
  361.     foreach i [after info] {
  362. after cancel $i
  363.     }
  364.     after 10; update; # On Mac make sure update won't take long
  365.     after 100 {set x x-done}
  366.     after 200 {set y y-done}
  367.     after 300 {set z z-done}
  368.     after idle {set q q-done}
  369.     set x before
  370.     set y before
  371.     set z before
  372.     set q before
  373.     list [vwait y] $x $y $z $q
  374. } {{} x-done y-done before q-done}
  375. foreach i [after info] {
  376.     after cancel $i
  377. }
  378. test event-11.5 {Tcl_VwaitCmd procedure: round robin scheduling, 2 sources} {socket} {
  379.     set test1file [makeFile "" test1]
  380.     set f1 [open $test1file w]
  381.     proc accept {s args} {
  382. puts $s foobar
  383. close $s
  384.     }
  385.     catch {set s1 [socket -server accept 0]}
  386.     after 1000
  387.     catch {set s2 [socket 127.0.0.1 [lindex [fconfigure $s1 -sockname] 2]]}
  388.     close $s1
  389.     set x 0
  390.     set y 0
  391.     set z 0
  392.     fileevent $s2 readable {incr z}
  393.     vwait z
  394.     fileevent $f1 writable {incr x; if {$y == 3} {set z done}}
  395.     fileevent $s2 readable {incr y; if {$x == 3} {set z done}}
  396.     vwait z
  397.     close $f1
  398.     close $s2
  399.     removeFile $test1file
  400.     list $x $y $z
  401. } {3 3 done}
  402. test event-11.6 {Tcl_VwaitCmd procedure: round robin scheduling, same source} {
  403.     set test1file [makeFile "" test1]
  404.     set test2file [makeFile "" test2]
  405.     set f1 [open $test1file w]
  406.     set f2 [open $test2file w]
  407.     set x 0
  408.     set y 0
  409.     set z 0
  410.     update
  411.     fileevent $f1 writable {incr x; if {$y == 3} {set z done}}
  412.     fileevent $f2 writable {incr y; if {$x == 3} {set z done}}
  413.     vwait z
  414.     close $f1
  415.     close $f2
  416.     removeFile $test1file
  417.     removeFile $test2file
  418.     list $x $y $z
  419. } {3 3 done}
  420. test event-12.1 {Tcl_UpdateCmd procedure} {
  421.     list [catch {update a b} msg] $msg
  422. } {1 {wrong # args: should be "update ?idletasks?"}}
  423. test event-12.2 {Tcl_UpdateCmd procedure} {
  424.     list [catch {update bogus} msg] $msg
  425. } {1 {bad option "bogus": must be idletasks}}
  426. test event-12.3 {Tcl_UpdateCmd procedure} {
  427.     foreach i [after info] {
  428. after cancel $i
  429.     }
  430.     after 500 {set x after}
  431.     after idle {set y after}
  432.     after idle {set z "after, y = $y"}
  433.     set x before
  434.     set y before
  435.     set z before
  436.     update idletasks
  437.     list $x $y $z
  438. } {before after {after, y = after}}
  439. test event-12.4 {Tcl_UpdateCmd procedure} {
  440.     foreach i [after info] {
  441. after cancel $i
  442.     }
  443.     after 10; update; # On Mac make sure update won't take long
  444.     after 200 {set x x-done}
  445.     after 600 {set y y-done}
  446.     after idle {set z z-done}
  447.     set x before
  448.     set y before
  449.     set z before
  450.     after 300
  451.     update
  452.     list $x $y $z
  453. } {x-done before z-done}
  454. test event-13.1 {Tcl_WaitForFile procedure, readable} {testfilehandler} {
  455.     foreach i [after info] {
  456. after cancel $i
  457.     }
  458.     after 100 set x timeout
  459.     testfilehandler close
  460.     testfilehandler create 1 off off
  461.     set x "no timeout"
  462.     set result [testfilehandler wait 1 readable 0]
  463.     update
  464.     testfilehandler close
  465.     list $result $x
  466. } {{} {no timeout}}
  467. test event-13.2 {Tcl_WaitForFile procedure, readable} testfilehandler {
  468.     foreach i [after info] {
  469. after cancel $i
  470.     }
  471.     after 100 set x timeout
  472.     testfilehandler close
  473.     testfilehandler create 1 off off
  474.     set x "no timeout"
  475.     set result [testfilehandler wait 1 readable 100]
  476.     update
  477.     testfilehandler close
  478.     list $result $x
  479. } {{} timeout}
  480. test event-13.3 {Tcl_WaitForFile procedure, readable} testfilehandler {
  481.     foreach i [after info] {
  482. after cancel $i
  483.     }
  484.     after 100 set x timeout
  485.     testfilehandler close
  486.     testfilehandler create 1 off off
  487.     testfilehandler fillpartial 1
  488.     set x "no timeout"
  489.     set result [testfilehandler wait 1 readable 100]
  490.     update
  491.     testfilehandler close
  492.     list $result $x
  493. } {readable {no timeout}}
  494. test event-13.4 {Tcl_WaitForFile procedure, writable} 
  495. {testfilehandler nonPortable} {
  496.     foreach i [after info] {
  497. after cancel $i
  498.     }
  499.     after 100 set x timeout
  500.     testfilehandler close
  501.     testfilehandler create 1 off off
  502.     testfilehandler fill 1
  503.     set x "no timeout"
  504.     set result [testfilehandler wait 1 writable 0]
  505.     update
  506.     testfilehandler close
  507.     list $result $x
  508. } {{} {no timeout}}
  509. test event-13.5 {Tcl_WaitForFile procedure, writable} 
  510. {testfilehandler nonPortable} {
  511.     foreach i [after info] {
  512. after cancel $i
  513.     }
  514.     after 100 set x timeout
  515.     testfilehandler close
  516.     testfilehandler create 1 off off
  517.     testfilehandler fill 1
  518.     set x "no timeout"
  519.     set result [testfilehandler wait 1 writable 100]
  520.     update
  521.     testfilehandler close
  522.     list $result $x
  523. } {{} timeout}
  524. test event-13.6 {Tcl_WaitForFile procedure, writable} testfilehandler {
  525.     foreach i [after info] {
  526. after cancel $i
  527.     }
  528.     after 100 set x timeout
  529.     testfilehandler close
  530.     testfilehandler create 1 off off
  531.     set x "no timeout"
  532.     set result [testfilehandler wait 1 writable 100]
  533.     update
  534.     testfilehandler close
  535.     list $result $x
  536. } {writable {no timeout}}
  537. test event-13.7 {Tcl_WaitForFile procedure, don't call other event handlers} testfilehandler {
  538.     foreach i [after info] {
  539. after cancel $i
  540.     }
  541.     after 100 lappend x timeout
  542.     after idle lappend x idle
  543.     testfilehandler close
  544.     testfilehandler create 1 off off
  545.     set x ""
  546.     set result [list [testfilehandler wait 1 readable 200] $x]
  547.     update
  548.     testfilehandler close
  549.     lappend result $x
  550. } {{} {} {timeout idle}}
  551. test event-13.8 {Tcl_WaitForFile procedure, waiting indefinitely} testfilewait {
  552.     set f [open "|sleep 2" r]
  553.     set result ""
  554.     lappend result [testfilewait $f readable 100]
  555.     lappend result [testfilewait $f readable -1]
  556.     close $f
  557.     set result
  558. } {{} readable}
  559. test event-14.1 {Tcl_WaitForFile procedure, readable, big fd} 
  560.     -constraints {testfilehandler unix} 
  561.     -setup {
  562. set chanList {}
  563. for {set i 0} {$i < 32} {incr i} {
  564.     lappend chanList [open /dev/null r]
  565. }
  566.     } 
  567.     -body {
  568. foreach i [after info] {
  569.     after cancel $i
  570. }
  571. after 100 set x timeout
  572. testfilehandler close
  573. testfilehandler create 1 off off
  574. set x "no timeout"
  575. set result [testfilehandler wait 1 readable 0]
  576. update
  577. testfilehandler close
  578. list $result $x
  579.     } 
  580.     -result {{} {no timeout}} 
  581.     -cleanup {
  582. foreach chan $chanList {close $chan}
  583.     }
  584. test event-14.2 {Tcl_WaitForFile procedure, readable, big fd} 
  585.     -constraints {testfilehandler unix} 
  586.     -setup {
  587. set chanList {}
  588. for {set i 0} {$i < 32} {incr i} {
  589.     lappend chanList [open /dev/null r]
  590. }
  591.     } 
  592.     -body {
  593. foreach i [after info] {
  594.     after cancel $i
  595. }
  596. after 100 set x timeout
  597. testfilehandler close
  598. testfilehandler create 1 off off
  599. set x "no timeout"
  600. set result [testfilehandler wait 1 readable 100]
  601. update
  602. testfilehandler close
  603. list $result $x
  604.     } 
  605.     -result {{} timeout} 
  606.     -cleanup {
  607. foreach chan $chanList {close $chan}
  608.     }
  609. test event-14.3 {Tcl_WaitForFile procedure, readable, big fd} 
  610.     -constraints {testfilehandler unix} 
  611.     -setup {
  612. set chanList {}
  613. for {set i 0} {$i < 32} {incr i} {
  614.     lappend chanList [open /dev/null r]
  615. }
  616.     } 
  617.     -body {
  618. foreach i [after info] {
  619.     after cancel $i
  620. }
  621. after 100 set x timeout
  622. testfilehandler close
  623. testfilehandler create 1 off off
  624. testfilehandler fillpartial 1
  625. set x "no timeout"
  626. set result [testfilehandler wait 1 readable 100]
  627. update
  628. testfilehandler close
  629. list $result $x
  630.     } 
  631.     -result {readable {no timeout}} 
  632.     -cleanup {
  633. foreach chan $chanList {close $chan}
  634.     }
  635. test event-14.4 {Tcl_WaitForFile procedure, writable, big fd} 
  636.     -constraints {testfilehandler unix nonPortable} 
  637.     -setup {
  638. set chanList {}
  639. for {set i 0} {$i < 32} {incr i} {
  640.     lappend chanList [open /dev/null r]
  641. }
  642.     } 
  643.     -body {
  644. foreach i [after info] {
  645.     after cancel $i
  646. }
  647. after 100 set x timeout
  648. testfilehandler close
  649. testfilehandler create 1 off off
  650. testfilehandler fill 1
  651. set x "no timeout"
  652. set result [testfilehandler wait 1 writable 0]
  653. update
  654. testfilehandler close
  655. list $result $
  656.     } 
  657.     -result {{} {no timeout}} 
  658.     -cleanup {
  659. foreach chan $chanList {close $chan}
  660.     }
  661. test event-14.5 {Tcl_WaitForFile procedure, writable, big fd} 
  662.     -constraints {testfilehandler unix nonPortable} 
  663.     -setup {
  664. set chanList {}
  665. for {set i 0} {$i < 32} {incr i} {
  666.     lappend chanList [open /dev/null r]
  667. }
  668.     } 
  669.     -body {
  670. foreach i [after info] {
  671.     after cancel $i
  672. }
  673. after 100 set x timeout
  674. testfilehandler close
  675. testfilehandler create 1 off off
  676. testfilehandler fill 1
  677. set x "no timeout"
  678. set result [testfilehandler wait 1 writable 100]
  679. update
  680. testfilehandler close
  681. list $result $x
  682.     } 
  683.     -result {{} timeout} 
  684.     -cleanup {
  685. foreach chan $chanList {close $chan}
  686.     }
  687. test event-14.6 {Tcl_WaitForFile procedure, writable, big fd} 
  688.     -constraints {testfilehandler unix} 
  689.     -setup {
  690. set chanList {}
  691. for {set i 0} {$i < 32} {incr i} {
  692.     lappend chanList [open /dev/null r]
  693. }
  694.     } 
  695.     -body {
  696. foreach i [after info] {
  697.     after cancel $i
  698. }
  699. after 100 set x timeout
  700. testfilehandler close
  701. testfilehandler create 1 off off
  702. set x "no timeout"
  703. set result [testfilehandler wait 1 writable 100]
  704. update
  705. testfilehandler close
  706. list $result $x
  707.     } 
  708.     -result {writable {no timeout}} 
  709.     -cleanup {
  710. foreach chan $chanList {close $chan}
  711.     }
  712. test event-14.7 {Tcl_WaitForFile, don't call other event handlers, big fd} 
  713.     -constraints {testfilehandler unix} 
  714.     -setup {
  715. set chanList {}
  716. for {set i 0} {$i < 32} {incr i} {
  717.     lappend chanList [open /dev/null r]
  718. }
  719.     } 
  720.     -body {
  721. foreach i [after info] {
  722.     after cancel $i
  723. }
  724. after 100 lappend x timeout
  725. after idle lappend x idle
  726. testfilehandler close
  727. testfilehandler create 1 off off
  728. set x ""
  729. set result [list [testfilehandler wait 1 readable 200] $x]
  730. update
  731. testfilehandler close
  732. lappend result $x
  733.     } 
  734.     -result {{} {} {timeout idle}} 
  735.     -cleanup {
  736. foreach chan $chanList {close $chan}
  737.     }
  738. test event-14.8 {Tcl_WaitForFile procedure, waiting indefinitely, big fd} 
  739.     -constraints {testfilewait unix} 
  740.     -body {
  741. set f [open "|sleep 2" r]
  742. set result ""
  743. lappend result [testfilewait $f readable 100]
  744. lappend result [testfilewait $f readable -1]
  745. close $f
  746. set result
  747.     } 
  748.     -setup {
  749. set chanList {}
  750. for {set i 0} {$i < 32} {incr i} {
  751.     lappend chanList [open /dev/null r]
  752. }
  753.     } 
  754.     -result {{} readable} 
  755.     -cleanup {
  756. foreach chan $chanList {close $chan}
  757.     }
  758. # cleanup
  759. foreach i [after info] {
  760.     after cancel $i
  761. }
  762. ::tcltest::cleanupTests
  763. return