android & benitlux: use NitObject in clients
[nit.git] / src / testing / testing_base.nit
index a6acc79..e035c9e 100644 (file)
@@ -31,6 +31,8 @@ redef class ToolContext
        var opt_noact = new OptionBool("Does not compile and run tests", "--no-act")
        # opt --nitc
        var opt_nitc = new OptionString("nitc compiler to use", "--nitc")
+       # opt --no-time
+       var opt_no_time = new OptionBool("Disable time information in XML", "--no-time")
 
        # Working directory for testing.
        fun test_dir: String do
@@ -62,8 +64,8 @@ redef class ToolContext
                        return nitc
                end
 
-               var nit_dir = nit_dir
-               nitc = nit_dir/"bin/nitc"
+               var nit_dir = nit_dir or else "."
+               nitc = nit_dir / "bin/nitc"
                if not nitc.file_exists then
                        fatal_error(null, "Error: cannot find nitc. Set envvar NIT_DIR or NITC or use the --nitc option.")
                        abort
@@ -106,7 +108,6 @@ ulimit -t {{{ulimit_usertime}}} 2> /dev/null
        # 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\x1B[K==== {name} ["
                var done = tests.length
                var fails = 0
@@ -165,6 +166,13 @@ ulimit -t {{{ulimit_usertime}}} 2> /dev/null
        fun show_unit(test: UnitTest, more_message: nullable String) do
                print test.to_screen(more_message, not opt_no_color.value)
        end
+
+       # Set the `NIT_TESTING_PATH` environment variable with `path`.
+       #
+       # If `path == null` then `NIT_TESTING_PATH` is set with the empty string.
+       fun set_testing_path(path: nullable String) do
+               "NIT_TESTING_PATH".setenv(path or else "")
+       end
 end
 
 # A unit test is an elementary test discovered, run and reported by nitunit.
@@ -256,17 +264,22 @@ abstract class UnitTest
                tc.attr("classname", xml_classname)
                tc.attr("name", xml_name)
                tc.attr("time", real_time.to_s)
+
+               var output = self.raw_output
+               if output != null then output = output.trunc(8192).filter_nonprintable
                var error = self.error
                if error != null then
+                       var node
                        if was_exec then
-                               tc.open("error").append(error)
+                               node = tc.open("error").attr("message", error)
                        else
-                               tc.open("failure").append(error)
+                               node = tc.open("failure").attr("message", error)
                        end
-               end
-               var output = self.raw_output
-               if output != null then
-                       tc.open("system-err").append(output.trunc(8192).filter_nonprintable)
+                       if output != null then
+                               node.append(output)
+                       end
+               else if output != null then
+                       tc.open("system-err").append(output)
                end
                return tc
        end