nitunit: add a `info` to unit-test for noteworthy information
[nit.git] / src / testing / testing_suite.nit
index f755d25..c15b1c0 100644 (file)
@@ -132,9 +132,9 @@ class TestSuite
        # Test to be executed after the whole test suite.
        var after_module: nullable TestCase = null
 
-       fun show_status(more_message: nullable String)
+       fun show_status
        do
-               toolcontext.show_unit_status("Test-suite of module " + mmodule.full_name, test_cases, more_message)
+               toolcontext.show_unit_status("Test-suite of module " + mmodule.full_name, test_cases)
        end
 
        # Execute the test suite
@@ -150,17 +150,16 @@ class TestSuite
                if not before_module == null then before_module.run
                for case in test_cases do
                        case.run
-                       show_status(case.full_name + " " + case.status_tag)
+                       toolcontext.clear_progress_bar
+                       toolcontext.show_unit(case)
+                       show_status
                end
 
-               show_status
-               print ""
-
                var after_module = self.after_module
                if not after_module == null then after_module.run
-               for case in test_cases do
-                       toolcontext.show_unit(case)
-               end
+
+               show_status
+               print ""
        end
 
        # Write the test unit for `self` in a nit compilable file.
@@ -280,8 +279,12 @@ class TestCase
                        var mmodule = test_method.mclassdef.mmodule
                        var file = mmodule.filepath
                        if file != null then
-                               var sav = file.dirname / mmodule.name + ".sav" / test_method.name + ".res"
-                               if sav.file_exists then
+                               var tries = [ file.dirname / mmodule.name + ".sav" / test_method.name + ".res",
+                                       file.dirname / "sav" / test_method.name + ".res" ,
+                                       file.dirname / test_method.name + ".res" ]
+                               var savs = [ for t in tries do if t.file_exists then t ]
+                               if savs.length == 1 then
+                                       var sav = savs.first
                                        toolcontext.info("Diff output with {sav}", 1)
                                        res = toolcontext.safe_exec("diff -u --label 'expected:{sav}' --label 'got:{res_name}.out1' '{sav}' '{res_name}.out1' > '{res_name}.diff' 2>&1 </dev/null")
                                        if res != 0 then
@@ -289,8 +292,12 @@ class TestCase
                                                error = "Difference with expected output: diff -u {sav} {res_name}.out1"
                                                toolcontext.modelbuilder.failed_tests += 1
                                        end
-                               else
-                                       toolcontext.info("No diff: {sav} not found", 2)
+                               else if savs.length > 1 then
+                                       toolcontext.info("Conflicting diffs: {savs.join(", ")}", 1)
+                                       error = "Conflicting expected output: {savs.join(", ", " and ")} all exist"
+                                       toolcontext.modelbuilder.failed_tests += 1
+                               else if not raw_output.is_empty then
+                                       toolcontext.info("No diff: {tries.join(", ", " or ")} not found", 1)
                                end
                        end
                end