aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2016-03-25 22:41:56 +1000
committerSteve Bennett <steveb@workware.net.au>2025-07-16 09:34:08 +1000
commitd5931248b6cf9a627ea8e2547c150c1dd791ddcc (patch)
tree76b44af61ada1e321f2e7da75efb7f60d1ebb31a
parent7c8c9ca1cfe8197f0410353e8b147d8cdef3791b (diff)
downloadjimtcl-d5931248b6cf9a627ea8e2547c150c1dd791ddcc.zip
jimtcl-d5931248b6cf9a627ea8e2547c150c1dd791ddcc.tar.gz
jimtcl-d5931248b6cf9a627ea8e2547c150c1dd791ddcc.tar.bz2
Update tests for new vwait with script
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--tests/event.test27
1 files changed, 23 insertions, 4 deletions
diff --git a/tests/event.test b/tests/event.test
index a81128e..3a0f3bb 100644
--- a/tests/event.test
+++ b/tests/event.test
@@ -104,10 +104,8 @@ test event-10.1 {Tcl_Exit procedure} exec {
test event-11.1 {Tcl_VwaitCmd procedure} -body {
vwait
-} -returnCodes error -match glob -result {wrong # args: should be "vwait* name"}
-test event-11.2 {Tcl_VwaitCmd procedure} -body {
- vwait a b
-} -returnCodes error -match glob -result {wrong # args: should be "vwait* name"}
+} -returnCodes error -result {wrong # args: should be "vwait ?-signal? name ?script?"}
+
test event-11.3 {Tcl_VwaitCmd procedure} jim {
catch {unset x}
set x 1
@@ -270,5 +268,26 @@ test event-14.2 {IPv6 socket stream.server client address} {jim socket ipv6} {
list [join [lrange [split $addr6 :] 0 end-1] :]
} {{[::1]}}
+test event-15.1 {vwait with script} {jim} {
+ set x 0
+ set result {}
+
+ local proc waiter {} {&x &result} {
+ lappend result $x
+ after 10 waiter
+ }
+
+ after 10 waiter
+ vwait done_waiter [lambda {} {&x} {
+ # By using a lambda to capture a reference to x, we can
+ # avoid a global variable. (done_waiter is not used)
+ if {[incr x] >= 5} {
+ break
+ }
+ }]
+ # The vwait script iterates 5 times before break, so it will
+ # cancel the event loop before waiter sets done_waiter
+ list $x $result
+} {5 {0 1 2 3 4}}
testreport