diff options
Diffstat (limited to 'tcl8.6/tests/unixNotfy.test')
-rw-r--r-- | tcl8.6/tests/unixNotfy.test | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/tcl8.6/tests/unixNotfy.test b/tcl8.6/tests/unixNotfy.test new file mode 100644 index 0000000..2f03529 --- /dev/null +++ b/tcl8.6/tests/unixNotfy.test @@ -0,0 +1,102 @@ +# This file contains tests for tclUnixNotfy.c. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# Copyright (c) 1997 by Sun Microsystems, Inc. +# Copyright (c) 1998-1999 by Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest 2 + namespace import -force ::tcltest::* +} + +# When run in a Tk shell, these tests hang. +testConstraint noTk [expr {0 != [catch {package present Tk}]}] +testConstraint thread [expr {0 == [catch {package require Thread 2.7-}]}] +# Darwin always uses a threaded notifier +testConstraint unthreaded [expr { + ![::tcl::pkgconfig get threaded] + && $tcl_platform(os) ne "Darwin" +}] + +# The next two tests will hang if threads are enabled because the notifier +# will not necessarily wait for ever in this case, so it does not generate +# an error. +test unixNotfy-1.1 {Tcl_DeleteFileHandler} -constraints {noTk unix unthreaded} -body { + catch {vwait x} + set f [open [makeFile "" foo] w] + fileevent $f writable {set x 1} + vwait x + close $f + list [catch {vwait x} msg] $msg +} -result {1 {can't wait for variable "x": would wait forever}} -cleanup { + catch { close $f } + catch { removeFile foo } +} +test unixNotfy-1.2 {Tcl_DeleteFileHandler} -constraints {noTk unix unthreaded} -body { + catch {vwait x} + set f1 [open [makeFile "" foo] w] + set f2 [open [makeFile "" foo2] w] + fileevent $f1 writable {set x 1} + fileevent $f2 writable {set y 1} + vwait x + close $f1 + vwait y + close $f2 + list [catch {vwait x} msg] $msg +} -result {1 {can't wait for variable "x": would wait forever}} -cleanup { + catch { close $f1 } + catch { close $f2 } + catch { removeFile foo } + catch { removeFile foo2 } +} + +test unixNotfy-2.1 {Tcl_DeleteFileHandler} \ + -constraints {noTk unix thread} \ + -body { + update + set f [open [makeFile "" foo] w] + fileevent $f writable {set x 1} + vwait x + close $f + thread::create "thread::send [thread::id] {set x ok}" + vwait x + set x + } \ + -result {ok} \ + -cleanup { + catch { close $f } + catch { removeFile foo } + } +test unixNotfy-2.2 {Tcl_DeleteFileHandler} \ + -constraints {noTk unix thread} \ + -body { + update + set f1 [open [makeFile "" foo] w] + set f2 [open [makeFile "" foo2] w] + fileevent $f1 writable {set x 1} + fileevent $f2 writable {set y 1} + vwait x + close $f1 + vwait y + close $f2 + thread::create "thread::send [thread::id] {set x ok}" + vwait x + set x + } \ + -result {ok} \ + -cleanup { + catch { close $f1 } + catch { close $f2 } + catch { removeFile foo } + catch { removeFile foo2 } + } + +# cleanup +::tcltest::cleanupTests +return |