summary refs log tree commit diff stats
path: root/tests/magics
diff options
context:
space:
mode:
authorTimothee Cour <timothee.cour2@gmail.com>2019-07-22 07:22:57 -0700
committerAndreas Rumpf <rumpf_a@web.de>2019-07-22 16:22:57 +0200
commit8c93c692b95da7b19a88cc0d56a8cdd20e3ae576 (patch)
treebeb483894fa86518ab65f95b2c8c8536d37234b5 /tests/magics
parent30f2cec67164e3e774a4dd5948828a5c6a439532 (diff)
downloadNim-8c93c692b95da7b19a88cc0d56a8cdd20e3ae576.tar.gz
run runnableExamples in the module scope (#11732) [feature]
Diffstat (limited to 'tests/magics')
-rw-r--r--tests/magics/trunnableexamples.nim60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/magics/trunnableexamples.nim b/tests/magics/trunnableexamples.nim
new file mode 100644
index 000000000..e6b2b70f8
--- /dev/null
+++ b/tests/magics/trunnableexamples.nim
@@ -0,0 +1,60 @@
+discard """
+cmd: "nim doc $file"
+action: "compile"
+nimout: '''
+foo1
+foo2
+foo3
+foo5
+foo6
+foo7
+foo8
+foo9
+'''
+joinable: false
+"""
+
+proc fun*() =
+  runnableExamples:
+    block: # `defer` only allowed inside a block
+      defer: echo "foo1"
+
+  runnableExamples:
+    # `fun*` only allowed at top level
+    proc fun*()=echo "foo2"
+    fun()
+    block:
+      defer: echo "foo3"
+
+  runnableExamples:
+    # ditto
+    proc fun*()=echo "foo5"
+    fun()
+
+  runnableExamples:
+    # `codeReordering` only allowed at top level
+    {.experimental: "codeReordering".}
+    proc fun1() = fun2()
+    proc fun2() = echo "foo6"
+    fun1()
+
+  runnableExamples:
+    # only works at top level
+    import std/macros
+    macro myImport(a: static string): untyped =
+      newTree(nnkImportStmt, [newLit a])
+    myImport "str" & "utils"
+    doAssert declared(isAlphaAscii)
+    echo "foo7"
+
+# also check for runnableExamples at module scope
+runnableExamples:
+  block:
+    defer: echo "foo8"
+
+runnableExamples:
+  proc fun*()=echo "foo9"
+  fun()
+
+# note: there are yet other examples where putting runnableExamples at module
+# scope is needed, for example when using an `include` before an `import`, etc.