X-Git-Url: http://nitlanguage.org diff --git a/src/testing/testing_suite.nit b/src/testing/testing_suite.nit index 5936038..37f5c74 100644 --- a/src/testing/testing_suite.nit +++ b/src/testing/testing_suite.nit @@ -141,19 +141,26 @@ class TestSuite if not toolcontext.test_dir.file_exists then toolcontext.test_dir.mkdir end + write_to_nit + compile toolcontext.info("Execute test-suite {mmodule.name}", 1) var before_module = self.before_module - if not before_module == null then run_case(before_module) - for case in test_cases do run_case(case) + if not before_module == null then before_module.run + for case in test_cases do case.run var after_module = self.after_module - if not after_module == null then run_case(after_module) + if not after_module == null then after_module.run end - # Execute a test case - fun run_case(test_case: TestCase) do - test_case.write_to_nit - test_case.compile - test_case.run + # Write the test unit for `self` in a nit compilable file. + fun write_to_nit do + var file = new Template + file.addn "intrude import test_suite" + file.addn "import {mmodule.name}\n" + file.addn "var name = args.first" + for case in test_cases do + case.write_to_nit(file) + end + file.write_to_file("{test_file}.nit") end # Return the test suite in XML format compatible with Jenkins. @@ -161,109 +168,112 @@ class TestSuite fun to_xml: HTMLTag do var n = new HTMLTag("testsuite") n.attr("package", mmodule.name) - for test in test_cases do n.add test.to_xml + if failure != null then + var f = new HTMLTag("failure") + f.attr("message", failure.to_s) + n.add f + else + for test in test_cases do n.add test.to_xml + end return n end -end - -# A test case is a unit test considering only a `MMethodDef`. -class TestCase - - # Test suite wich `self` belongs to. - var test_suite: TestSuite - - # Test method to be compiled and tested. - var test_method: MMethodDef - - # `ToolContext` to use to display messages and find `nitg` bin. - var toolcontext: ToolContext - - # `MMethodDef` to call before the test case. - var before_test: nullable MMethodDef = null - - # `MMethodDef` to call after the test case. - var after_test: nullable MMethodDef = null # Generated test file name. fun test_file: String do - var dir = toolcontext.test_dir - var mod = test_method.mclassdef.mmodule.name - var cls = test_method.mclassdef.name - var name = test_method.name - return "{dir}/{mod}_{cls}_{name}" - end - - # Generate the test unit in a nit file. - fun write_to_nit do - var name = test_method.name - var file = new Template - file.addn "intrude import test_suite" - file.addn "import {test_method.mclassdef.mmodule.name}\n" - if test_method.mproperty.is_toplevel then - file.addn name - else - file.addn "var subject = new {test_method.mclassdef.name}.nitunit" - if before_test != null then file.addn "subject.{before_test.name}" - file.addn "subject.{name}" - if after_test != null then file.addn "subject.{after_test.name}" - end - file.write_to_file("{test_file}.nit") + return toolcontext.test_dir / "gen_{mmodule.name.escape_to_c}" end - # Compile all test cases in once. + # Compile all `test_cases` cases in one file. fun compile do # find nitg 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 # compile test suite var file = test_file - var include_dir = test_method.mclassdef.mmodule.location.file.filename.dirname + var include_dir = mmodule.location.file.filename.dirname var cmd = "{nitg} --no-color '{file}.nit' -I {include_dir} -o '{file}.bin' > '{file}.out' 2>&1 '{file}.out1' 2>&1 '{res_name}.out1' 2>&1