X-Git-Url: http://nitlanguage.org diff --git a/src/testing/testing_suite.nit b/src/testing/testing_suite.nit index f102c6c..295598b 100644 --- a/src/testing/testing_suite.nit +++ b/src/testing/testing_suite.nit @@ -18,6 +18,7 @@ module testing_suite import testing_base import html private import annotation +private import realtime redef class ToolContext # --pattern @@ -121,22 +122,60 @@ class TestSuite # Test to be executed after the whole test suite. var after_module: nullable TestCase = null - fun show_status - do + # Display test suite status in std-out. + fun show_status do + var test_cases = self.test_cases.to_a + if before_module != null then test_cases.add before_module.as(not null) + if after_module != null then test_cases.add after_module.as(not null) toolcontext.show_unit_status("Test-suite of module " + mmodule.full_name, test_cases) end # Execute the test suite fun run do + set_env show_status if not toolcontext.test_dir.file_exists then toolcontext.test_dir.mkdir end write_to_nit compile + if failure != null then + for case in test_cases do + case.fail "Compilation Error" + case.raw_output = failure + toolcontext.clear_progress_bar + toolcontext.show_unit(case) + end + show_status + print "" + return + end toolcontext.info("Execute test-suite {mmodule.name}", 1) + var before_module = self.before_module - if not before_module == null then before_module.run + var after_module = self.after_module + + if before_module != null then + before_module.run + toolcontext.clear_progress_bar + toolcontext.show_unit(before_module) + if before_module.error != null then + for case in test_cases do + case.fail "Nitunit Error: before_module test failed" + toolcontext.clear_progress_bar + toolcontext.show_unit(case) + end + if after_module != null then + after_module.fail "Nitunit Error: before_module test failed" + toolcontext.clear_progress_bar + toolcontext.show_unit(after_module) + end + show_status + print "" + return + end + end + for case in test_cases do case.run toolcontext.clear_progress_bar @@ -144,8 +183,12 @@ class TestSuite show_status end - var after_module = self.after_module - if not after_module == null then after_module.run + if not after_module == null then + after_module.run + toolcontext.clear_progress_bar + toolcontext.show_unit(after_module) + show_status + end show_status print "" @@ -157,9 +200,17 @@ class TestSuite file.addn "intrude import test_suite" file.addn "import {mmodule.name}\n" file.addn "var name = args.first" + var before_module = self.before_module + if before_module != null then + before_module.write_to_nit(file) + end for case in test_cases do case.write_to_nit(file) end + var after_module = self.after_module + if after_module != null then + after_module.write_to_nit(file) + end file.write_to_file("{test_file}.nit") end @@ -168,14 +219,7 @@ class TestSuite fun to_xml: HTMLTag do var n = new HTMLTag("testsuite") n.attr("package", mmodule.name) - var failure = self.failure - 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 + for test in test_cases do n.add test.to_xml return n end @@ -202,14 +246,16 @@ class TestSuite var f = new FileReader.open("{file}.out") var msg = f.read_all f.close - # set test case result - var loc = mmodule.location if res != 0 then failure = msg - toolcontext.warning(loc, "failure", "FAILURE: {mmodule.name} (in file {file}.nit): {msg}") - toolcontext.modelbuilder.failed_tests += 1 end - toolcontext.check_errors + end + + # Set environment variables for test suite execution + fun set_env do + var loc = mmodule.location.file + if loc == null then return + toolcontext.set_testing_path(loc.filename) end # Error occured during test-suite compilation. @@ -257,7 +303,10 @@ class TestCase var method_name = test_method.name var test_file = test_suite.test_file var res_name = "{test_file}_{method_name.escape_to_c}" + var clock = new Clock var res = toolcontext.safe_exec("{test_file}.bin {method_name} > '{res_name}.out1' 2>&1