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 `<testcase>` XML node in format compatible with Jenkins unit tests.
fun to_xml: HTMLTag do
var tc = new HTMLTag("testcase")
tc.attr("classname", xml_classname)
# 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.
# 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
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
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
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
# 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.
#
# 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
# 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
end
end
end
+ is_done = true
toolcontext.check_errors
end