summary refs log tree commit diff stats
path: root/tests/closure/tforum.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-08-05 21:45:58 +0200
committerAraq <rumpf_a@web.de>2014-08-05 21:45:58 +0200
commitca8135f34b30b5c9da62f6d55f6bc5726206535b (patch)
tree27cfb6801e4df7130f533b494a9c549cb430d9eb /tests/closure/tforum.nim
parent55250b3f36f403d0a8baf49c8d30e2290105d2b1 (diff)
downloadNim-ca8135f34b30b5c9da62f6d55f6bc5726206535b.tar.gz
added test
Diffstat (limited to 'tests/closure/tforum.nim')
-rw-r--r--tests/closure/tforum.nim44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/closure/tforum.nim b/tests/closure/tforum.nim
new file mode 100644
index 000000000..4f6a16ff7
--- /dev/null
+++ b/tests/closure/tforum.nim
@@ -0,0 +1,44 @@
+discard """
+  output: '''asdas
+processClient end
+false
+'''
+"""
+
+type
+  PAsyncHttpServer = ref object
+    value: string
+  PFutureBase = ref object
+    callback: proc () {.closure.}
+    value: string
+    failed: bool
+
+proc accept(server: PAsyncHttpServer): PFutureBase =
+  new(result)
+  result.callback = proc () =
+    discard
+  server.value = "hahaha"
+
+proc processClient(): PFutureBase =
+  new(result)
+
+proc serve(server: PAsyncHttpServer): PFutureBase =
+  iterator serveIter(): PFutureBase {.closure.} =
+    echo server.value
+    while true:
+      var acceptAddrFut = server.accept()
+      yield acceptAddrFut
+      var fut = acceptAddrFut.value
+
+      var f = processClient()
+      f.callback =
+        proc () =
+          echo("processClient end")
+          echo(f.failed)
+      yield f
+  var x = serveIter
+  for i in 0 .. 1:
+    result = x()
+    result.callback()
+
+discard serve(PAsyncHttpServer(value: "asdas"))