79 lines
1.9 KiB
Python
79 lines
1.9 KiB
Python
# testcheck - 回归测试格式化输出库
|
||
# 提供 PASS/FAIL 计数、分节标题、汇总报告
|
||
import t, c
|
||
import stdio
|
||
from w32.win32console import SetConsoleOutputCP, SetConsoleCP
|
||
|
||
CP_UTF8: t.CDefine = 65001
|
||
|
||
_pass_count: t.CInt = 0
|
||
_fail_count: t.CInt = 0
|
||
_total_pass: t.CInt = 0
|
||
_total_fail: t.CInt = 0
|
||
|
||
|
||
def begin(name: str):
|
||
"""开始测试套件,打印头部并重置当前套件计数器(累计计数不变)"""
|
||
global _pass_count, _fail_count
|
||
_pass_count = 0
|
||
_fail_count = 0
|
||
SetConsoleOutputCP(CP_UTF8)
|
||
SetConsoleCP(CP_UTF8)
|
||
stdio.printf("=== %s ===\n\n", name)
|
||
stdio.fflush(None)
|
||
|
||
|
||
def section(name: str):
|
||
"""打印分节标题"""
|
||
stdio.printf("--- %s ---\n", name)
|
||
stdio.fflush(None)
|
||
|
||
|
||
def ok(msg: str):
|
||
"""打印 PASS 并计数"""
|
||
global _pass_count
|
||
_pass_count += 1
|
||
stdio.printf("PASS: %s\n", msg)
|
||
stdio.fflush(None)
|
||
|
||
|
||
def fail(msg: str):
|
||
"""打印 FAIL 并计数"""
|
||
global _fail_count
|
||
_fail_count += 1
|
||
stdio.printf("FAIL: %s\n", msg)
|
||
stdio.fflush(None)
|
||
|
||
|
||
def check(cond: t.CInt, ok_msg: str, fail_msg: str):
|
||
"""条件检查,自动选择 PASS/FAIL"""
|
||
if cond:
|
||
ok(ok_msg)
|
||
else:
|
||
fail(fail_msg)
|
||
|
||
|
||
def info(msg: str):
|
||
"""打印信息消息(不计入 PASS/FAIL)"""
|
||
stdio.printf("%s\n", msg)
|
||
stdio.fflush(None)
|
||
|
||
|
||
def end() -> t.CInt:
|
||
"""打印当前套件汇总,累加到总计,返回当前套件失败数"""
|
||
global _total_pass, _total_fail
|
||
_total_pass += _pass_count
|
||
_total_fail += _fail_count
|
||
stdio.printf("\n--- Summary ---\n")
|
||
stdio.printf("PASS: %d, FAIL: %d\n", _pass_count, _fail_count)
|
||
stdio.fflush(None)
|
||
return _fail_count
|
||
|
||
|
||
def summary() -> t.CInt:
|
||
"""打印所有套件的总计汇总,返回总失败数"""
|
||
stdio.printf("\n=== Total Summary ===\n")
|
||
stdio.printf("Total PASS: %d, Total FAIL: %d\n", _total_pass, _total_fail)
|
||
stdio.fflush(None)
|
||
return _total_fail
|