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

通讯编程

开发平台:

Visual C++

  1. # This file contains tests for tclUnixNotfy.c.
  2. #
  3. # This file contains a collection of tests for one or more of the Tcl
  4. # built-in commands.  Sourcing this file into Tcl runs the tests and
  5. # generates output for errors.  No output means no errors were found.
  6. #
  7. # Copyright (c) 1997 by Sun Microsystems, Inc.
  8. # Copyright (c) 1998-1999 by Scriptics Corporation.
  9. #
  10. # See the file "license.terms" for information on usage and redistribution
  11. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  12. #
  13. # RCS: @(#) $Id: unixNotfy.test,v 1.11.2.4 2005/05/14 20:52:31 das Exp $
  14. # The tests should not be run if you have a notifier which is unable to
  15. # detect infinite vwaits, as the tests below will hang. The presence of
  16. # the "testthread" command indicates that this is the case.
  17. if {[lsearch [namespace children] ::tcltest] == -1} {
  18.     package require tcltest 2
  19.     namespace import -force ::tcltest::*
  20. }
  21. if {[info exists tk_version]} {
  22.     puts "When run in a Tk shell, these tests run hang.  Skipping tests ..."
  23.     ::tcltest::cleanupTests
  24.     return
  25. }
  26. set ::tcltest::testConstraints(testthread) 
  27. [expr {[info commands testthread] != {}}]
  28. # Darwin always uses a threaded notifier
  29. testConstraint unthreaded [expr {
  30.     (![info exist tcl_platform(threaded)] || !$tcl_platform(threaded))
  31.     && $tcl_platform(os) ne "Darwin"
  32. }]
  33. # The next two tests will hang if threads are enabled because the notifier
  34. # will not necessarily wait for ever in this case, so it does not generate
  35. # an error.
  36. test unixNotfy-1.1 {Tcl_DeleteFileHandler} 
  37.     -constraints {unixOnly && unthreaded} 
  38.     -body {
  39. catch {vwait x}
  40. set f [open [makeFile "" foo] w]
  41. fileevent $f writable {set x 1}
  42. vwait x
  43. close $f
  44. list [catch {vwait x} msg] $msg
  45.     } 
  46.     -result {1 {can't wait for variable "x":  would wait forever}} 
  47.     -cleanup { 
  48. catch { close $f }
  49. catch { removeFile foo }
  50.     }
  51. test unixNotfy-1.2 {Tcl_DeleteFileHandler} 
  52.     -constraints {unixOnly && unthreaded} 
  53.     -body {
  54. catch {vwait x}
  55. set f1 [open [makeFile "" foo] w]
  56. set f2 [open [makeFile "" foo2] w]
  57. fileevent $f1 writable {set x 1}
  58. fileevent $f2 writable {set y 1}
  59. vwait x
  60. close $f1
  61. vwait y
  62. close $f2
  63. list [catch {vwait x} msg] $msg
  64.     } 
  65.     -result {1 {can't wait for variable "x":  would wait forever}} 
  66.     -cleanup {
  67. catch { close $f1 }
  68. catch { close $f2 }
  69. catch { removeFile foo }
  70. catch { removeFile foo2 }
  71.     }
  72. test unixNotfy-2.1 {Tcl_DeleteFileHandler} 
  73.     -constraints {unixOnly testthread} 
  74.     -body {
  75. update
  76. set f [open [makeFile "" foo] w]
  77. fileevent $f writable {set x 1}
  78. vwait x
  79. close $f
  80. testthread create "testthread send [testthread id] {set x ok}"
  81. vwait x
  82. threadReap
  83. set x
  84.     } 
  85.     -result {ok} 
  86.     -cleanup {
  87. catch { close $f }
  88. catch { removeFile foo }
  89.     }
  90. test unixNotfy-2.2 {Tcl_DeleteFileHandler} 
  91.     -constraints {unixOnly testthread} 
  92.     -body {
  93. update
  94. set f1 [open [makeFile "" foo] w]
  95. set f2 [open [makeFile "" foo2] w]
  96. fileevent $f1 writable {set x 1}
  97. fileevent $f2 writable {set y 1}
  98. vwait x
  99. close $f1
  100. vwait y
  101. close $f2
  102. testthread create "testthread send [testthread id] {set x ok}"
  103. vwait x
  104. threadReap
  105. set x
  106.     } 
  107.     -result {ok} 
  108.     -cleanup { 
  109. catch { close $f1 }
  110. catch { close $f2 }
  111. catch { removeFile foo }
  112. catch { removeFile foo2 }
  113.     }
  114. # cleanup
  115. ::tcltest::cleanupTests
  116. return