X-Git-Url: http://nitlanguage.org diff --git a/src/testing/testing_doc.nit b/src/testing/testing_doc.nit index 1ea2cf7..75e0830 100644 --- a/src/testing/testing_doc.nit +++ b/src/testing/testing_doc.nit @@ -36,6 +36,9 @@ class NitUnitExecutor # The XML node associated to the module var testsuite: HTMLTag + # The name of the suite + var name: String + # Markdown processor used to parse markdown comments and extract code. var mdproc = new MarkdownProcessor @@ -70,30 +73,64 @@ class NitUnitExecutor # Populate `blocks` from the markdown decorator mdproc.process(mdoc.content.join("\n")) - - toolcontext.check_errors end # All extracted docunits var docunits = new Array[DocUnit] + fun show_status + do + toolcontext.show_unit_status(name, docunits) + end + + fun mark_done(du: DocUnit) + do + du.is_done = true + toolcontext.clear_progress_bar + toolcontext.show_unit(du) + show_status + end + # Execute all the docunits fun run_tests do + if docunits.is_empty then + return + end + + # Try to group each nitunit into a single source file to fasten the compilation var simple_du = new Array[DocUnit] + show_status for du in docunits do # Skip existing errors - if du.error != null then continue + if du.error != null then + continue + end var ast = toolcontext.parse_something(du.block) if ast isa AExpr then simple_du.add du + end + end + test_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 + # Already compiled. Execute it. + execute_simple_docunit(du) else + # Need to try to compile it, then execute it test_single_docunit(du) end + mark_done(du) end - test_simple_docunits(simple_du) + # Final status + show_status + print "" for du in docunits do testsuite.add du.to_xml @@ -137,28 +174,35 @@ class NitUnitExecutor if res != 0 then # Compilation error. - # Fall-back to individual modes: - for du in dus do - test_single_docunit(du) - end + # They will be executed independently return end + # Compilation was a success. + # Store what need to be executed for each one. i = 0 for du in dus do i += 1 - toolcontext.info("Execute doc-unit {du.full_name} in {file} {i}", 1) - var res2 = toolcontext.safe_exec("{file.to_program_name}.bin {i} >'{file}.out1' 2>&1 '{file}.out1' 2>&1 '{file}.out1' 2>&1 '{file}.out1' 2>&1 '{file}.out1' 2>&1 1 then + res += "#{number}" + end + return res + else + return xml_classname + "." + xml_name + end end # The text of the code to execute. @@ -376,7 +433,7 @@ class DocUnit # # If `self` is made of multiple code-blocks, then the location # starts at the first code-books and finish at the last one, thus includes anything between. - var location: Location is lazy do + redef var location is lazy do return new Location(mdoc.location.file, lines.first, lines.last+1, columns.first+1, 0) end @@ -442,7 +499,7 @@ redef class ModelBuilder var prefix = toolcontext.test_dir prefix = prefix.join_path(mmodule.to_s) - var d2m = new NitUnitExecutor(toolcontext, prefix, o, ts) + var d2m = new NitUnitExecutor(toolcontext, prefix, o, ts, "Docunits of module {mmodule.full_name}") do total_entities += 1 @@ -496,7 +553,7 @@ redef class ModelBuilder var prefix = toolcontext.test_dir prefix = prefix.join_path(mgroup.to_s) - var d2m = new NitUnitExecutor(toolcontext, prefix, o, ts) + var d2m = new NitUnitExecutor(toolcontext, prefix, o, ts, "Docunits of group {mgroup.full_name}") total_entities += 1 var mdoc = mgroup.mdoc @@ -515,14 +572,14 @@ redef class ModelBuilder fun test_mdoc(mdoc: MDoc): HTMLTag do var ts = new HTMLTag("testsuite") - var file = mdoc.location.to_s + var file = mdoc.location.file.filename toolcontext.info("nitunit: doc-unit file {file}", 2) ts.attr("package", file) var prefix = toolcontext.test_dir / "file" - var d2m = new NitUnitExecutor(toolcontext, prefix, null, ts) + var d2m = new NitUnitExecutor(toolcontext, prefix, null, ts, "Docunits of file {file}") total_entities += 1 doc_entities += 1