From 8c93c692b95da7b19a88cc0d56a8cdd20e3ae576 Mon Sep 17 00:00:00 2001 From: Timothee Cour Date: Mon, 22 Jul 2019 07:22:57 -0700 Subject: run runnableExamples in the module scope (#11732) [feature] --- tests/magics/trunnableexamples.nim | 60 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 tests/magics/trunnableexamples.nim (limited to 'tests') 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. -- cgit 1.4.1-2-gfad0