summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2018-10-09 18:39:12 +0100
committerAndreas Rumpf <rumpf_a@web.de>2018-10-09 19:39:12 +0200
commit21ecf64d243a93fab29aed6d3e439918d72c6e16 (patch)
tree2c4afca01f2d42348fa0c07502fe2867112f85e8 /tests
parent5076fda2e25a7f14dac130b591de6cc1eebfcc06 (diff)
downloadNim-21ecf64d243a93fab29aed6d3e439918d72c6e16.tar.gz
Fixes #8994. FutureStream read procedure data loss no longer occurs. (#9183)
* Fixes #8994. FutureStream read procedure data loss no longer occurs.

* Optimises the fix for #8994.
Diffstat (limited to 'tests')
-rw-r--r--tests/async/tfuturestream.nim20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/async/tfuturestream.nim b/tests/async/tfuturestream.nim
index d76752b7e..32624b100 100644
--- a/tests/async/tfuturestream.nim
+++ b/tests/async/tfuturestream.nim
@@ -35,6 +35,26 @@ proc beta() {.async.} =
 asyncCheck alpha()
 waitFor beta()
 
+template ensureCallbacksAreScheduled =
+  # callbacks are called directly if the dispatcher is not running
+  discard getGlobalDispatcher()
+
+proc testCompletion() {.async.} =
+  ensureCallbacksAreScheduled
+
+  var stream = newFutureStream[string]()
+
+  for i in 1..5:
+    await stream.write($i)
+
+  var readFuture = stream.readAll()
+  stream.complete()
+  yield readFuture
+  let data = readFuture.read()
+  doAssert(data.len == 5, "actual data len = " & $data.len)
+
+waitFor testCompletion()
+
 # TODO: Something like this should work eventually.
 # proc delta(): FutureStream[string] {.async.} =
 #   for i in 0 .. 5: