src: nitunit and docdown use the fence-tag to skip non-nit code
[nit.git] / src / testing / testing_doc.nit
index 9f31805..501ccfd 100644 (file)
 module testing_doc
 
 import testing_base
-intrude import markdown
+intrude import docdown
 
 # Extractor, Executor and Reporter for the tests in a module
 class NitUnitExecutor
        super Doc2Mdwn
 
-       # The module to import
-       var mmodule: MModule
-
        # The prefix of the generated Nit source-file
        var prefix: String
 
+       # The module to import
+       var mmodule: MModule
+
        # The XML node associated to the module
        var testsuite: HTMLTag
 
-       # Initialize a new e
-       init(toolcontext: ToolContext, prefix: String, mmodule: MModule, testsuite: HTMLTag)
-       do
-               super(toolcontext)
-               self.prefix = prefix
-               self.mmodule = mmodule
-               self.testsuite = testsuite
-       end
-
        # All blocks of code from a same `ADoc`
        var blocks = new Array[Array[String]]
 
-       redef fun process_code(n: HTMLTag, text: String)
+       redef fun process_code(n: HTMLTag, text: String, tag: nullable String)
        do
+               # Skip non-blocks
+               if n.tag != "pre" then return
+
+               # Skip strict non-nit
+               if tag != null and tag != "nit" and tag != "" then
+                       return
+               end
+
                # Try to parse it
                var ast = toolcontext.parse_something(text)
 
@@ -80,7 +79,7 @@ class NitUnitExecutor
        end
 
        # The associated node to localize warnings
-       var ndoc: nullable ADoc
+       var ndoc: nullable ADoc = null
 
        # used to generate distinct names
        var cpt = 0
@@ -107,7 +106,7 @@ class NitUnitExecutor
                toolcontext.modelbuilder.unit_entities += 1
 
                cpt += 1
-               var file = "{prefix}{cpt}.nit"
+               var file = "{prefix}-{cpt}.nit"
 
                toolcontext.info("Execute doc-unit {tc.attrs["name"]} in {file}", 1)
 
@@ -127,8 +126,8 @@ class NitUnitExecutor
                if toolcontext.opt_noact.value then return
 
                var nit_dir = toolcontext.nit_dir
-               var nitg = "{nit_dir or else ""}/bin/nitg"
-               if nit_dir == null or not nitg.file_exists then
+               var nitg = nit_dir/"bin/nitg"
+               if not nitg.file_exists then
                        toolcontext.error(null, "Cannot find nitg. Set envvar NIT_DIR.")
                        toolcontext.check_errors
                end
@@ -136,7 +135,7 @@ class NitUnitExecutor
                var res = sys.system(cmd)
                var res2 = 0
                if res == 0 then
-                       res2 = sys.system("./{file}.bin >>'{file}.out1' 2>&1 </dev/null")
+                       res2 = sys.system("{file.to_program_name}.bin >>'{file}.out1' 2>&1 </dev/null")
                end
 
                var msg
@@ -200,7 +199,6 @@ redef class ModelBuilder
                if not mmodule2nmodule.has_key(mmodule) then return ts
 
                var nmodule = mmodule2nmodule[mmodule]
-               assert nmodule != null
 
                # usualy, only the original module must be imported in the unit test.
                var o = mmodule