From fb727ef60ba1799eb9088e9ea5146b2a426ca90e Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Tue, 24 May 2016 20:06:57 -0400 Subject: [PATCH] nitunit: add more information in UnitTest Signed-off-by: Jean Privat --- src/testing/testing_base.nit | 26 ++++++++++++++++++++++---- src/testing/testing_doc.nit | 28 +++++++++++++++++++++------- src/testing/testing_suite.nit | 5 +++++ 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/src/testing/testing_base.nit b/src/testing/testing_base.nit index 4249df5..7db143e 100644 --- a/src/testing/testing_base.nit +++ b/src/testing/testing_base.nit @@ -95,20 +95,36 @@ ulimit -t {{{ulimit_usertime}}} 2> /dev/null var ulimit_usertime = 600 is writable end -# A unit test is an elementary test discovered, run and reported bu nitunit. +# A unit test is an elementary test discovered, run and reported by nitunit. # # This class factorizes `DocUnit` and `TestCase`. abstract class UnitTest + # The name of the unit to show in messages + fun full_name: String is abstract - # Error occurred during test-case execution. + # The location of the unit test to show in messages. + fun location: Location is abstract + + # Flag that indicates if the unit test was compiled/run. + var is_done: Bool = false is writable + + # Error message occurred during test-case execution (or compilation). var error: nullable String = null is writable # Was the test case executed at least once? + # + # This will indicate the status of the test (failture or error) var was_exec = false is writable - # Return the `TestCase` in XML format compatible with Jenkins. + # The raw output of the execution (or compilation) # - # See to_xml + # It merges the standard output and error output + var raw_output: nullable String = null is writable + + # The location where the error occurred, if it makes sense. + var error_location: nullable Location = null is writable + + # Return a `` XML node in format compatible with Jenkins unit tests. fun to_xml: HTMLTag do var tc = new HTMLTag("testcase") tc.attr("classname", xml_classname) @@ -128,6 +144,8 @@ abstract class UnitTest # The `classname` attribute of the XML format. # # NOTE: jenkins expects a '.' in the classname attr + # + # See to_xml fun xml_classname: String is abstract # The `name` attribute of the XML format. diff --git a/src/testing/testing_doc.nit b/src/testing/testing_doc.nit index 5a8ca3d..fab4bb7 100644 --- a/src/testing/testing_doc.nit +++ b/src/testing/testing_doc.nit @@ -77,13 +77,21 @@ class NitUnitExecutor # All extracted docunits var docunits = new Array[DocUnit] + fun mark_done(du: DocUnit) + do + du.is_done = true + end + # Execute all the docunits fun run_tests do var simple_du = new Array[DocUnit] for du in docunits do # Skip existing errors - if du.error != null then continue + if du.error != null then + mark_done(du) + continue + end var ast = toolcontext.parse_something(du.block) if ast isa AExpr then @@ -159,6 +167,7 @@ class NitUnitExecutor toolcontext.warning(du.location, "error", "ERROR: {du.full_name} (in {file}): Runtime error\n{msg}") toolcontext.modelbuilder.failed_entities += 1 end + mark_done(du) toolcontext.check_errors end end @@ -198,6 +207,7 @@ class NitUnitExecutor toolcontext.warning(du.location, "error", "ERROR: {du.full_name} (in {file}):\n{msg}") toolcontext.modelbuilder.failed_entities += 1 end + mark_done(du) toolcontext.check_errors end @@ -295,7 +305,9 @@ private class NitunitDecorator var du = new_docunit du.block += code - du.error = "{location}: {message}" + du.error_location = location + du.error = message + executor.toolcontext.modelbuilder.failed_entities += 1 return end @@ -353,11 +365,13 @@ class DocUnit # The numbering of self in mdoc (starting with 0) var number: Int - # The name of the unit to show in messages - fun full_name: String do + redef fun full_name do var mentity = mdoc.original_mentity - if mentity != null then return mentity.full_name - return xml_classname + "." + xml_name + if mentity != null then + return mentity.full_name + else + return xml_classname + "." + xml_name + end end # The text of the code to execute. @@ -379,7 +393,7 @@ class DocUnit # # If `self` is made of multiple code-blocks, then the location # starts at the first code-books and finish at the last one, thus includes anything between. - var location: Location is lazy do + redef var location is lazy do return new Location(mdoc.location.file, lines.first, lines.last+1, columns.first+1, 0) end diff --git a/src/testing/testing_suite.nit b/src/testing/testing_suite.nit index ee2701f..59b4499 100644 --- a/src/testing/testing_suite.nit +++ b/src/testing/testing_suite.nit @@ -222,6 +222,10 @@ class TestCase # Test method to be compiled and tested. var test_method: MMethodDef + redef fun full_name do return test_method.full_name + + redef fun location do return test_method.location + # `ToolContext` to use to display messages and find `nitc` bin. var toolcontext: ToolContext @@ -280,6 +284,7 @@ class TestCase end end end + is_done = true toolcontext.check_errors end -- 1.7.9.5