From 89cd1bdcf4a814051ca9f345861aff3fb645cd9e Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Mon, 15 Dec 2014 15:33:39 -0500 Subject: [PATCH] nitunit: enable the execution of simple docunit in a single program Signed-off-by: Jean Privat --- src/testing/testing_doc.nit | 97 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/src/testing/testing_doc.nit b/src/testing/testing_doc.nit index 2d04a9c..2bdbb02 100644 --- a/src/testing/testing_doc.nit +++ b/src/testing/testing_doc.nit @@ -116,12 +116,109 @@ class NitUnitExecutor # Execute all the docunits fun run_tests do + var simple_du = new Array[DocUnit] for du in docunits do + var ast = toolcontext.parse_something(du.block) + if ast isa AExpr then + simple_du.add du + else test_single_docunit(du) + end + end + + test_simple_docunits(simple_du) + end + + # Executes 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 + # * 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]) + do + if dus.is_empty then return + + var file = "{prefix}-0.nit" + + var dir = file.dirname + if dir != "" then dir.mkdir + var f + f = new OFStream.open(file) + f.write("# GENERATED FILE\n") + f.write("# Docunits extracted from comments\n") + f.write("import {mmodule.name}\n") + f.write("\n") + var i = 0 + for du in dus do + + i += 1 + f.write("fun run_{i} do\n") + f.write("# {du.testcase.attrs["name"]}\n") + f.write(du.block) + f.write("end\n") + end + f.write("var a = args.first.to_i\n") + for j in [1..i[ do + f.write("if a == {j} then run_{j}\n") + end + f.close + + if toolcontext.opt_noact.value then return + + var nit_dir = toolcontext.nit_dir + 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 + var cmd = "{nitg} --ignore-visibility --no-color '{file}' -I {mmodule.location.file.filename.dirname} >'{file}.out1' 2>&1 >'{file}.out1' 2>&1