import testing_base
import markdown
import html
+import realtime
# Extractor, Executor and Reporter for the tests in a module
class NitUnitExecutor
fun mark_done(du: DocUnit)
do
du.is_done = true
- toolcontext.clear_status
+ toolcontext.clear_progress_bar
toolcontext.show_unit(du)
show_status
end
simple_du.add du
end
end
- test_simple_docunits(simple_du)
+ # Try to mass compile all the simple du as a single nit module
+ compile_simple_docunits(simple_du)
# Now test them in order
for du in docunits do
if du.error != null then
# Nothing to execute. Conclude
- else if du.test_file != null then
+ else if du.is_compiled then
# Already compiled. Execute it.
execute_simple_docunit(du)
else
end
end
- # Executes multiples doc-units in a shared program.
+ # Compiles multiples doc-units in a shared program.
# Used for docunits simple block of code (without modules, classes, functions etc.)
#
- # In case of compilation error, the method fallbacks to `test_single_docunit` to
+ # In case of success, the docunits are compiled and the caller can call `execute_simple_docunit`.
+ #
+ # In case of compilation error, the docunits are let uncompiled.
+ # The caller should fallbacks to `test_single_docunit` to
# * locate exactly the compilation problem in the problematic docunit.
# * permit the execution of the other docunits that may be correct.
- fun test_simple_docunits(dus: Array[DocUnit])
+ fun compile_simple_docunits(dus: Array[DocUnit])
do
if dus.is_empty then return
var file = "{prefix}-0.nit"
+ toolcontext.info("Compile {dus.length} simple(s) doc-unit(s) in {file}", 1)
+
var dir = file.dirname
if dir != "" then dir.mkdir
var f
f = create_unitfile(file)
var i = 0
for du in dus do
-
i += 1
f.write("fun run_{i} do\n")
f.write("# {du.full_name}\n")
if res != 0 then
# Compilation error.
- # They will be executed independently
+ # They should be generated and compiled independently
return
end
i += 1
du.test_file = file
du.test_arg = i
+ du.is_compiled = true
end
end
var file = du.test_file.as(not null)
var i = du.test_arg.as(not null)
toolcontext.info("Execute doc-unit {du.full_name} in {file} {i}", 1)
+ var clock = new Clock
var res2 = toolcontext.safe_exec("{file.to_program_name}.bin {i} >'{file}.out1' 2>&1 </dev/null")
+ if not toolcontext.opt_no_time.value then du.real_time = clock.total
du.was_exec = true
var content = "{file}.out1".to_path.read_all
var res = compile_unitfile(file)
var res2 = 0
if res == 0 then
+ var clock = new Clock
res2 = toolcontext.safe_exec("{file.to_program_name}.bin >'{file}.out1' 2>&1 </dev/null")
+ if not toolcontext.opt_no_time.value then du.real_time = clock.total
du.was_exec = true
end
f.write("# GENERATED FILE\n")
f.write("# Docunits extracted from comments\n")
if mmodule != null then
- f.write("import {mmodule.name}\n")
+ f.write("intrude import {mmodule.name}\n")
end
f.write("\n")
return f
if mmodule != null then
opts.add "-I {mmodule.filepath.dirname}"
end
- var cmd = "{nitc} --ignore-visibility --no-color '{file}' {opts.join(" ")} >'{file}.out1' 2>&1 </dev/null -o '{file}.bin'"
+ var cmd = "{nitc} --ignore-visibility --no-color -q '{file}' {opts.join(" ")} >'{file}.out1' 2>&1 </dev/null -o '{file}.bin'"
var res = toolcontext.safe_exec(cmd)
return res
end
# See `test_arg` that is used to distinguish them
var test_file: nullable String = null
+ # Was `test_file` successfully compiled?
+ var is_compiled = false
+
# The command-line argument to use when executing the test, if any.
var test_arg: nullable Int = null
var ndoc = nclassdef.n_doc
if ndoc != null then
doc_entities += 1
- d2m.extract(ndoc.to_mdoc, "nitunit." + mmodule.full_name + "." + mclassdef.mclass.full_name, "<class>")
+ d2m.extract(ndoc.to_mdoc, "nitunit." + mclassdef.full_name.replace("$", "."), "<class>")
end
end
for npropdef in nclassdef.n_propdefs do
var ndoc = npropdef.n_doc
if ndoc != null then
doc_entities += 1
- d2m.extract(ndoc.to_mdoc, "nitunit." + mmodule.full_name + "." + mclassdef.mclass.full_name, mpropdef.mproperty.full_name)
+ var a = mpropdef.full_name.split("$")
+ d2m.extract(ndoc.to_mdoc, "nitunit." + a[0] + "." + a[1], a[2])
end
end
end
doc_entities += 1
# NOTE: jenkins expects a '.' in the classname attr
- d2m.extract(mdoc, "nitunit." + mgroup.full_name, "<group>")
+ d2m.extract(mdoc, "nitunit." + mgroup.mpackage.name + "." + mgroup.name + ".<group>", "<group>")
d2m.run_tests