X-Git-Url: http://nitlanguage.org diff --git a/src/testing/testing_base.nit b/src/testing/testing_base.nit index f814edc..36ce1f9 100644 --- a/src/testing/testing_base.nit +++ b/src/testing/testing_base.nit @@ -97,15 +97,19 @@ ulimit -t {{{ulimit_usertime}}} 2> /dev/null # Show a single-line status to use as a progression. # - # Note that the line starts with `'\r'` and is not ended by a `'\n'`. + # If `has_progress_bar` is true, then the output is a progress bar. + # The printed the line starts with `'\r'` and is not ended by a `'\n'`. # So it is expected that: # * no other output is printed between two calls # * the last `show_unit_status` is followed by a new-line + # + # If `has_progress_bar` is false, then only the first and last state is shown fun show_unit_status(name: String, tests: SequenceRead[UnitTest]) do var esc = 27.code_point.to_s - var line = "\r{esc}[K* {name} [" + var line = "\r\x1B[K==== {name} [" var done = tests.length + var fails = 0 for t in tests do if not t.is_done then line += " " @@ -114,35 +118,46 @@ ulimit -t {{{ulimit_usertime}}} 2> /dev/null line += ".".green.bold else line += "X".red.bold + fails += 1 end end - if not has_status then + if not has_progress_bar then if done == 0 then - print "* {name} ({tests.length} tests)" + print "==== {name} | tests: {tests.length}" end return end - line += "] {done}/{tests.length}" + if done < tests.length then + line += "] {done}/{tests.length}" + else + line += "] tests: {tests.length} " + if fails == 0 then + line += "OK".green.bold + else + line += "KO: {fails}".red.bold + end + end printn "{line}" end - # Is a status bar printed? + # Is a progress bar printed? # - # true if color and non-verbose mode - fun has_status: Bool + # true if color (because and non-verbose mode + # (because verbose mode messes up with the progress bar). + fun has_progress_bar: Bool do return not opt_no_color.value and opt_verbose.value <= 0 end - # Clear the line if `has_status` (no-op else) - fun clear_status + # Clear the line if `has_progress_bar` (no-op else) + fun clear_progress_bar do - if has_status then printn "\r\x1B[K" + if has_progress_bar then printn "\r\x1B[K" end - # Shoe the full description of the test-case. + # Show the full description of the test-case. # # The output honors `--no-color`. # @@ -183,6 +198,9 @@ abstract class UnitTest # The location where the error occurred, if it makes sense. var error_location: nullable Location = null is writable + # Additional noteworthy information when a test success. + var info: nullable String = null + # A colorful `[OK]` or `[KO]`. fun status_tag(color: nullable Bool): String do color = color or else true @@ -221,6 +239,10 @@ abstract class UnitTest else res = "{status_tag(color)} {full_name}" if more_message != null then res += more_message + var info = self.info + if info != null then + res += "\n {info}" + end end return res end