# ------------------------------------------------------------------------------
# Creates an export of a test run in the JUnit XML format.
# ------------------------------------------------------------------------------
var _utils = load("res://addons/gut/utils.gd").get_instance()
var _exporter = _utils.ResultExporter.new()
func indent(s, ind):
var to_return = ind + s
to_return = to_return.replace("\n", "\n" + ind)
return to_return
func add_attr(name, value):
return str(name, '="', value, '" ')
func _export_test_result(test):
var to_return = ""
# Right now the pending and failure messages won't fit in the message
# attribute because they can span multiple lines and need to be escaped.
if test.status == "pending":
var skip_tag = str('', test.pending[0], "")
to_return += skip_tag
elif test.status == "fail":
var fail_tag = str('', test.failing[0], "")
to_return += fail_tag
return to_return
func _export_tests(script_result, classname):
var to_return = ""
for key in script_result.keys():
var test = script_result[key]
var assert_count = test.passing.size() + test.failing.size()
to_return += "\n"
to_return += _export_test_result(test)
to_return += "\n"
return to_return
func _export_scripts(exp_results):
var to_return = ""
for key in exp_results.test_scripts.scripts.keys():
var s = exp_results.test_scripts.scripts[key]
to_return += "\n"
to_return += indent(_export_tests(s.tests, key), " ")
to_return += "\n"
return to_return
func get_results_xml(gut):
var exp_results = _exporter.get_results_dictionary(gut)
var to_return = '' + "\n"
to_return += "\n"
to_return += indent(_export_scripts(exp_results), " ")
to_return += ""
return to_return
func write_file(gut, path):
var xml = get_results_xml(gut)
var f_result = _utils.write_file(path, xml)
if f_result != OK:
var msg = str("Error: ", f_result, ". Could not create export file ", path)
_utils.get_logger().error(msg)
return f_result