;================================================================
; test/unit_test 单元测试
; unit_test_func_all.erb 单元测试集合
;================================================================


;;;运行单元测试集合
;;;@return 没有返回值
@RunAllUnitTest()
    #DIMS DYNAMIC unit_array, 100
    #DIM DYNAMIC test_count
    #DIM DYNAMIC pass_count
    #DIM DYNAMIC i
    #DIMS DYNAMIC func_name
    #DIMS DYNAMIC html
    test_count = ENUMFUNCBEGINSWITH("unit_test")
    FOR i, 0, test_count
        unit_array:i '= RESULTS:i
    NEXT
    CALL PrintLog(@"函数名以 unit_test 开头的函数共 {test_count} 个，开始测试。")
    FOR i, 0, test_count
        func_name '= REPLACE(unit_array:i, "unit_test_func_", "")
        html += @"%GETTIMES()% |  TEST | {i + 1, 2}. 函数 %get_text_html(@"@%func_name, 30, LEFT%", 1p1, "yellow")%"
        TRYCCALLFORM %unit_array:i%
            IF RESULT
                pass_count += 1
                html += @"%get_text_html(@"%UNICODE(0x2713)% 单元测试通过", , "green")%"
            ELSE
                html += @"%get_text_html(@"%UNICODE(0x2717)% 单元测试未通过", , "red")% 没有达成预期结果"
            ENDIF
        CATCH
            html += @"%get_text_html(@"%UNICODE(0x2717)% 单元测试未通过", , "red")% 目标函数不存在"
        ENDCATCH
        html += "<br>"
    NEXT
    HTML_PRINT html
    {
        CALL PrintLog(
            @"所有单元测试完成，总计通过 {pass_count}/{test_count}，通过率为 %div(pass_count * 100, test_count, 2)%\%。",
            pass_count == test_count ? "info" # "warn"
        )
    }
    RETURN
