forked from datawhale/whale-town-front
- 修复 WebSocketManager/SocketIOClient 函数缩进错误 - 重命名 is_connected() 避免与 Object 基类冲突 - 修复 tscn 文件多余前导空格 - 修复测试文件 GUT 断言函数调用 - 添加 GUT 测试框架
211 lines
5.9 KiB
GDScript
211 lines
5.9 KiB
GDScript
# ------------------------------------------------------------------------------
|
|
# Prints things, mostly. Knows too much about gut.gd, but it's only supposed to
|
|
# work with gut.gd, so I'm fine with that.
|
|
# ------------------------------------------------------------------------------
|
|
# a _test_collector to use when one is not provided.
|
|
var _gut = null
|
|
|
|
|
|
func _init(gut=null):
|
|
_gut = gut
|
|
|
|
# ---------------------
|
|
# Private
|
|
# ---------------------
|
|
func _log_end_run_header(gut):
|
|
var lgr = gut.get_logger()
|
|
lgr.log('==============================================', lgr.fmts.yellow)
|
|
lgr.log("= Run Summary", lgr.fmts.yellow)
|
|
lgr.log('==============================================', lgr.fmts.yellow)
|
|
|
|
|
|
func _log_what_was_run(gut):
|
|
if(!GutUtils.is_null_or_empty(gut._select_script)):
|
|
gut.p('Ran Scripts matching "' + gut._select_script + '"')
|
|
if(!GutUtils.is_null_or_empty(gut._unit_test_name)):
|
|
gut.p('Ran Tests matching "' + gut._unit_test_name + '"')
|
|
if(!GutUtils.is_null_or_empty(gut._inner_class_name)):
|
|
gut.p('Ran Inner Classes matching "' + gut._inner_class_name + '"')
|
|
|
|
|
|
func _total_fmt(text, value):
|
|
var space = 18
|
|
if(str(value) == '0'):
|
|
value = 'none'
|
|
return str(text.rpad(space), str(value).lpad(5))
|
|
|
|
|
|
func _log_non_zero_total(text, value, lgr):
|
|
if(str(value) != '0'):
|
|
lgr.log(_total_fmt(text, value))
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
|
|
func _log_totals(gut, totals):
|
|
var lgr = gut.get_logger()
|
|
lgr.log()
|
|
|
|
# lgr.log("---- Totals ----")
|
|
lgr.log("Totals")
|
|
lgr.log("------")
|
|
var issue_count = 0
|
|
issue_count += _log_non_zero_total('Errors', totals.errors, lgr)
|
|
issue_count += _log_non_zero_total('Warnings', totals.warnings, lgr)
|
|
issue_count += _log_non_zero_total('Deprecated', totals.deprecated, lgr)
|
|
if(issue_count > 0):
|
|
lgr.log("")
|
|
|
|
lgr.log(_total_fmt( 'Scripts', totals.scripts))
|
|
lgr.log(_total_fmt( 'Tests', gut.get_test_collector().get_ran_test_count()))
|
|
lgr.log(_total_fmt( 'Passing Tests', totals.passing_tests))
|
|
_log_non_zero_total('Failing Tests', totals.failing_tests, lgr)
|
|
_log_non_zero_total('Risky/Pending', totals.risky + totals.pending, lgr)
|
|
if(totals.failing == 0):
|
|
lgr.log(_total_fmt( 'Asserts', totals.passing + totals.failing))
|
|
else:
|
|
lgr.log(_total_fmt( 'Asserts', str(totals.passing, '/', totals.passing + totals.failing)))
|
|
_log_non_zero_total( 'Orphans', totals.orphans, lgr)
|
|
lgr.log(_total_fmt( 'Time', str(gut.get_elapsed_time(), 's')))
|
|
|
|
return totals
|
|
|
|
|
|
func _log_nothing_run(gut):
|
|
var lgr = gut.get_logger()
|
|
lgr.error("Nothing was run.")
|
|
lgr.log('On the one hand nothing failed, on the other hand nothing did anything.')
|
|
_log_what_was_run(gut)
|
|
|
|
|
|
# ---------------------
|
|
# Public
|
|
# ---------------------
|
|
func log_all_non_passing_tests(gut=_gut):
|
|
var test_collector = gut.get_test_collector()
|
|
var lgr = gut.get_logger()
|
|
|
|
var to_return = {
|
|
passing = 0,
|
|
non_passing = 0
|
|
}
|
|
|
|
for test_script in test_collector.scripts:
|
|
lgr.set_indent_level(0)
|
|
|
|
if(test_script.was_skipped or test_script.get_fail_count() > 0 or test_script.get_pending_count() > 0):
|
|
lgr.log("\n" + test_script.get_full_name(), lgr.fmts.underline)
|
|
|
|
if(test_script.was_skipped):
|
|
lgr.inc_indent()
|
|
var skip_msg = str('[Risky] Script was skipped: ', test_script.skip_reason)
|
|
lgr.log(skip_msg, lgr.fmts.yellow)
|
|
lgr.dec_indent()
|
|
|
|
var test_fail_count = 0
|
|
for test in test_script.tests:
|
|
if(test.was_run):
|
|
if(test.is_passing()):
|
|
to_return.passing += 1
|
|
else:
|
|
to_return.non_passing += 1
|
|
lgr.log(str('- ', test.name))
|
|
lgr.inc_indent()
|
|
|
|
for i in range(test.fail_texts.size()):
|
|
lgr.failed(test.fail_texts[i])
|
|
test_fail_count += 1
|
|
for i in range(test.pending_texts.size()):
|
|
lgr.pending(test.pending_texts[i])
|
|
if(test.is_risky()):
|
|
lgr.risky('Did not assert')
|
|
lgr.dec_indent()
|
|
|
|
if(test_script.get_fail_count() > test_fail_count):
|
|
lgr.failed("before_all/after_all assert failed")
|
|
|
|
return to_return
|
|
|
|
|
|
func log_the_final_line(totals, gut):
|
|
var lgr = gut.get_logger()
|
|
var grand_total_text = ""
|
|
var grand_total_fmt = lgr.fmts.none
|
|
if(totals.failing_tests > 0):
|
|
grand_total_text = str(totals.failing_tests, " failing tests")
|
|
grand_total_fmt = lgr.fmts.red
|
|
elif(totals.failing > 0): # no failing tests, but some failing asserts
|
|
grand_total_text = str(totals.failing, " assert(s) in before_all/after_all methods failed")
|
|
grand_total_fmt = lgr.fmts.red
|
|
elif(totals.risky > 0 or totals.pending > 0):
|
|
grand_total_text = str(totals.risky + totals.pending, " pending/risky tests.")
|
|
grand_total_fmt = lgr.fmts.yellow
|
|
else:
|
|
grand_total_text = "All tests passed!"
|
|
grand_total_fmt = lgr.fmts.green
|
|
|
|
lgr.log(str("---- ", grand_total_text, " ----"), grand_total_fmt)
|
|
|
|
|
|
func log_totals(gut, totals):
|
|
var lgr = gut.get_logger()
|
|
var orig_indent = lgr.get_indent_level()
|
|
lgr.set_indent_level(0)
|
|
_log_totals(gut, totals)
|
|
lgr.set_indent_level(orig_indent)
|
|
|
|
|
|
func get_totals(gut=_gut):
|
|
var tc = gut.get_test_collector()
|
|
var lgr = gut.get_logger()
|
|
|
|
var totals = {
|
|
failing = 0,
|
|
failing_tests = 0,
|
|
passing = 0,
|
|
passing_tests = 0,
|
|
pending = 0,
|
|
risky = 0,
|
|
scripts = tc.get_ran_script_count(),
|
|
tests = 0,
|
|
|
|
deprecated = lgr.get_deprecated().size(),
|
|
errors = lgr.get_errors().size(),
|
|
warnings = lgr.get_warnings().size(),
|
|
}
|
|
|
|
for s in tc.scripts:
|
|
# assert totals
|
|
totals.passing += s.get_pass_count()
|
|
totals.pending += s.get_pending_count()
|
|
totals.failing += s.get_fail_count()
|
|
|
|
# test totals
|
|
totals.tests += s.get_ran_test_count()
|
|
totals.passing_tests += s.get_passing_test_count()
|
|
totals.failing_tests += s.get_failing_test_count()
|
|
totals.risky += s.get_risky_count()
|
|
|
|
totals.orphans = gut.get_orphan_counter().orphan_count()
|
|
|
|
return totals
|
|
|
|
|
|
func log_end_run(gut=_gut):
|
|
var totals = get_totals(gut)
|
|
if(totals.tests == 0):
|
|
_log_nothing_run(gut)
|
|
return
|
|
|
|
_log_end_run_header(gut)
|
|
var lgr = gut.get_logger()
|
|
|
|
log_all_non_passing_tests(gut)
|
|
log_totals(gut, totals)
|
|
lgr.log("\n")
|
|
|
|
_log_what_was_run(gut)
|
|
log_the_final_line(totals, gut)
|
|
lgr.log("")
|