if not mclassdef.is_test then continue
if not suite_match_pattern(mclassdef) then continue
toolcontext.modelbuilder.total_classes += 1
- var before_test = mclassdef.before_test
- var after_test = mclassdef.after_test
for mpropdef in mclassdef.mpropdefs do
if not mpropdef isa MMethodDef or not mpropdef.is_test then continue
if not case_match_pattern(mpropdef) then continue
toolcontext.modelbuilder.total_tests += 1
var test = new TestCase(suite, mpropdef, toolcontext)
- test.before_test = before_test
- test.after_test = after_test
suite.add_test test
end
end
fun to_xml: HTMLTag do
var n = new HTMLTag("testsuite")
n.attr("package", mmodule.name)
+ var failure = self.failure
if failure != null then
var f = new HTMLTag("failure")
f.attr("message", failure.to_s)
# Compile all `test_cases` cases in one file.
fun compile do
# find nitc
- var nit_dir = toolcontext.nit_dir
- var nitc = nit_dir/"bin/nitc"
- if not nitc.file_exists then
- toolcontext.error(null, "Error: cannot find nitc. Set envvar NIT_DIR.")
- toolcontext.check_errors
- end
+ var nitc = toolcontext.find_nitc
# compile test suite
var file = test_file
- var include_dir = mmodule.location.file.filename.dirname
+ var module_file = mmodule.location.file
+ if module_file == null then
+ toolcontext.error(null, "Error: cannot find module file for {mmodule.name}.")
+ toolcontext.check_errors
+ return
+ end
+ var include_dir = module_file.filename.dirname
var cmd = "{nitc} --no-color '{file}.nit' -I {include_dir} -o '{file}.bin' > '{file}.out' 2>&1 </dev/null"
var res = sys.system(cmd)
var f = new FileReader.open("{file}.out")
# `ToolContext` to use to display messages and find `nitc` bin.
var toolcontext: ToolContext
- # `MMethodDef` to call before the test case.
- var before_test: nullable MMethodDef = null
-
- # `MMethodDef` to call after the test case.
- var after_test: nullable MMethodDef = null
-
# Generate the test unit for `self` in `file`.
fun write_to_nit(file: Template) do
var name = test_method.name
file.addn "\t{name}"
else
file.addn "\tvar subject = new {test_method.mclassdef.name}.nitunit"
- if before_test != null then file.addn "\tsubject.{before_test.name}"
+ file.addn "\tsubject.before_test"
file.addn "\tsubject.{name}"
- if after_test != null then file.addn "\tsubject.{after_test.name}"
+ file.addn "\tsubject.after_test"
end
file.addn "end"
end
var n = new HTMLTag("system-out")
n.append "out"
tc.add n
+ var error = self.error
if error != null then
n = new HTMLTag("error")
n.attr("message", error.to_s)
# i.e. begins with "test_"
private fun is_test: Bool do return name.has_prefix("test_")
- # Is the method a "before_test"?
- private fun is_before: Bool do return name == "before_test"
-
- # Is the method a "after_test"?
- private fun is_after: Bool do return name == "after_test"
-
# Is the method a "before_module"?
private fun is_before_module: Bool do return mproperty.is_toplevel and name == "before_module"
# Is the class a TestClass?
# i.e. begins with "Test"
private fun is_test: Bool do
+ var in_hierarchy = self.in_hierarchy
+ if in_hierarchy == null then return false
for sup in in_hierarchy.greaters do
if sup.name == "TestSuite" then return true
end
return false
end
-
- # "before_test" method for this classdef.
- private fun before_test: nullable MMethodDef do
- for mpropdef in mpropdefs do
- if mpropdef isa MMethodDef and mpropdef.is_before then return mpropdef
- end
- return null
- end
-
- # "after_test" method for this classdef.
- private fun after_test: nullable MMethodDef do
- for mpropdef in mpropdefs do
- if mpropdef isa MMethodDef and mpropdef.is_after then return mpropdef
- end
- return null
- end
end
redef class MModule
if f != null then
test_file = f
else if not test_file.file_exists then
- var include_dir = mmodule.location.file.filename.dirname
+ var module_file = mmodule.location.file
+ if module_file == null then
+ toolcontext.info("Skip test for {mmodule}, no file found", 2)
+ return ts
+ end
+ var include_dir = module_file.filename.dirname
test_file = "{include_dir}/{test_file}"
end
if not test_file.file_exists then