Skip to content

Commit d593124

Browse files
committed
Update tests for new vwait with script
Signed-off-by: Steve Bennett <[email protected]>
1 parent 7c8c9ca commit d593124

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

tests/event.test

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,8 @@ test event-10.1 {Tcl_Exit procedure} exec {
104104

105105
test event-11.1 {Tcl_VwaitCmd procedure} -body {
106106
vwait
107-
} -returnCodes error -match glob -result {wrong # args: should be "vwait* name"}
108-
test event-11.2 {Tcl_VwaitCmd procedure} -body {
109-
vwait a b
110-
} -returnCodes error -match glob -result {wrong # args: should be "vwait* name"}
107+
} -returnCodes error -result {wrong # args: should be "vwait ?-signal? name ?script?"}
108+
111109
test event-11.3 {Tcl_VwaitCmd procedure} jim {
112110
catch {unset x}
113111
set x 1
@@ -270,5 +268,26 @@ test event-14.2 {IPv6 socket stream.server client address} {jim socket ipv6} {
270268
list [join [lrange [split $addr6 :] 0 end-1] :]
271269
} {{[::1]}}
272270

271+
test event-15.1 {vwait with script} {jim} {
272+
set x 0
273+
set result {}
274+
275+
local proc waiter {} {&x &result} {
276+
lappend result $x
277+
after 10 waiter
278+
}
279+
280+
after 10 waiter
281+
vwait done_waiter [lambda {} {&x} {
282+
# By using a lambda to capture a reference to x, we can
283+
# avoid a global variable. (done_waiter is not used)
284+
if {[incr x] >= 5} {
285+
break
286+
}
287+
}]
288+
# The vwait script iterates 5 times before break, so it will
289+
# cancel the event loop before waiter sets done_waiter
290+
list $x $result
291+
} {5 {0 1 2 3 4}}
273292

274293
testreport

0 commit comments

Comments
 (0)