📄 automated.c
字号:
if (NULL != pTempFailure->strCondition) { CU_translate_special_characters(pTempFailure->strCondition, szTemp, sizeof(szTemp)); } else { szTemp[0] = '\0'; } fprintf(f_pTestResultFile, " <CUNIT_RUN_TEST_RECORD> \n" " <CUNIT_RUN_TEST_FAILURE> \n" " <TEST_NAME> %s </TEST_NAME> \n" " <FILE_NAME> %s </FILE_NAME> \n" " <LINE_NUMBER> %u </LINE_NUMBER> \n" " <CONDITION> %s </CONDITION> \n" " </CUNIT_RUN_TEST_FAILURE> \n" " </CUNIT_RUN_TEST_RECORD> \n", (NULL != pTest->pName) ? pTest->pName : "", (NULL != pTempFailure->strFileName) ? pTempFailure->strFileName : "", pTempFailure->uiLineNumber, szTemp); pTempFailure = pTempFailure->pNext; } } else { fprintf(f_pTestResultFile, " <CUNIT_RUN_TEST_RECORD> \n" " <CUNIT_RUN_TEST_SUCCESS> \n" " <TEST_NAME> %s </TEST_NAME> \n" " </CUNIT_RUN_TEST_SUCCESS> \n" " </CUNIT_RUN_TEST_RECORD> \n", (NULL != pTest->pName) ? pTest->pName : ""); }}/*------------------------------------------------------------------------*//** Handler function called at completion of all tests in a suite. * @param pFailure Pointer to the test failure record list. */static void automated_all_tests_complete_message_handler(const CU_pFailureRecord pFailure){ CU_pTestRegistry pRegistry = CU_get_registry(); CU_pRunSummary pRunSummary = CU_get_run_summary(); CU_UNREFERENCED_PARAMETER(pFailure); /* not used */ assert(NULL != pRegistry); assert(NULL != pRunSummary); assert(NULL != f_pTestResultFile); if ((NULL != f_pRunningSuite) && (CU_TRUE == f_bWriting_CUNIT_RUN_SUITE)) { fprintf(f_pTestResultFile, " </CUNIT_RUN_SUITE_SUCCESS> \n" " </CUNIT_RUN_SUITE> \n"); } fprintf(f_pTestResultFile, " </CUNIT_RESULT_LISTING>\n" " <CUNIT_RUN_SUMMARY> \n"); fprintf(f_pTestResultFile, " <CUNIT_RUN_SUMMARY_RECORD> \n" " <TYPE> Suites </TYPE> \n" " <TOTAL> %u </TOTAL> \n" " <RUN> %u </RUN> \n" " <SUCCEEDED> - NA - </SUCCEEDED> \n" " <FAILED> %u </FAILED> \n" " </CUNIT_RUN_SUMMARY_RECORD> \n", pRegistry->uiNumberOfSuites, pRunSummary->nSuitesRun, pRunSummary->nSuitesFailed ); fprintf(f_pTestResultFile, " <CUNIT_RUN_SUMMARY_RECORD> \n" " <TYPE> Test Cases </TYPE> \n" " <TOTAL> %u </TOTAL> \n" " <RUN> %u </RUN> \n" " <SUCCEEDED> %u </SUCCEEDED> \n" " <FAILED> %u </FAILED> \n" " </CUNIT_RUN_SUMMARY_RECORD> \n", pRegistry->uiNumberOfTests, pRunSummary->nTestsRun, pRunSummary->nTestsRun - pRunSummary->nTestsFailed, pRunSummary->nTestsFailed ); fprintf(f_pTestResultFile, " <CUNIT_RUN_SUMMARY_RECORD> \n" " <TYPE> Assertions </TYPE> \n" " <TOTAL> %u </TOTAL> \n" " <RUN> %u </RUN> \n" " <SUCCEEDED> %u </SUCCEEDED> \n" " <FAILED> %u </FAILED> \n" " </CUNIT_RUN_SUMMARY_RECORD> \n" " </CUNIT_RUN_SUMMARY> \n", pRunSummary->nAsserts, pRunSummary->nAsserts, pRunSummary->nAsserts - pRunSummary->nAssertsFailed, pRunSummary->nAssertsFailed );}/*------------------------------------------------------------------------*//** Handler function called when suite initialization fails. * @param pSuite The suite for which initialization failed. */static void automated_suite_init_failure_message_handler(const CU_pSuite pSuite){ assert(NULL != pSuite); assert(NULL != f_pTestResultFile); if (CU_TRUE == f_bWriting_CUNIT_RUN_SUITE) { fprintf(f_pTestResultFile, " </CUNIT_RUN_SUITE_SUCCESS> \n" " </CUNIT_RUN_SUITE> \n"); f_bWriting_CUNIT_RUN_SUITE = CU_FALSE; } fprintf(f_pTestResultFile, " <CUNIT_RUN_SUITE> \n" " <CUNIT_RUN_SUITE_FAILURE> \n" " <SUITE_NAME> %s </SUITE_NAME> \n" " <FAILURE_REASON> %s </FAILURE_REASON> \n" " </CUNIT_RUN_SUITE_FAILURE> \n" " </CUNIT_RUN_SUITE> \n", (NULL != pSuite->pName) ? pSuite->pName : "", "Suite Initialization Failed");}/*------------------------------------------------------------------------*//** Handler function called when suite cleanup fails. * @param pSuite The suite for which cleanup failed. */static void automated_suite_cleanup_failure_message_handler(const CU_pSuite pSuite){ assert(NULL != pSuite); assert(NULL != f_pTestResultFile); if (CU_TRUE == f_bWriting_CUNIT_RUN_SUITE) { fprintf(f_pTestResultFile, " </CUNIT_RUN_SUITE_SUCCESS> \n" " </CUNIT_RUN_SUITE> \n"); f_bWriting_CUNIT_RUN_SUITE = CU_FALSE; } fprintf(f_pTestResultFile, " <CUNIT_RUN_SUITE> \n" " <CUNIT_RUN_SUITE_FAILURE> \n" " <SUITE_NAME> %s </SUITE_NAME> \n" " <FAILURE_REASON> %s </FAILURE_REASON> \n" " </CUNIT_RUN_SUITE_FAILURE> \n" " </CUNIT_RUN_SUITE> \n", (NULL != pSuite->pName) ? pSuite->pName : "", "Suite Cleanup Failed");}/*------------------------------------------------------------------------*//** Finalize and close the results output file generated * by the automated interface. */static CU_ErrorCode uninitialize_result_file(void){ char* szTime; time_t tTime = 0; assert(NULL != f_pTestResultFile); CU_set_error(CUE_SUCCESS); time(&tTime); szTime = ctime(&tTime); fprintf(f_pTestResultFile, " <CUNIT_FOOTER> File Generated By CUnit v" CU_VERSION " at %s </CUNIT_FOOTER> \n" "</CUNIT_TEST_RUN_REPORT>", (NULL != szTime) ? szTime : ""); if (0 != fclose(f_pTestResultFile)) { CU_set_error(CUE_FCLOSE_FAILED); } return CU_get_error();}/*------------------------------------------------------------------------*//** Generate an xml listing of all tests in all suites for the * specified test registry. The output is directed to a file * having the specified name. * @param pRegistry Test registry for which to generate list (non-NULL). * @param szFilename Non-NULL, non-empty string containing name for * listing file. * @return A CU_ErrorCode indicating the error status. */static CU_ErrorCode automated_list_all_tests(CU_pTestRegistry pRegistry, const char* szFilename){ CU_pSuite pSuite = NULL; CU_pTest pTest = NULL; FILE* pTestListFile = NULL; char* szTime; time_t tTime = 0; CU_set_error(CUE_SUCCESS); if (NULL == pRegistry) { CU_set_error(CUE_NOREGISTRY); } else if ((NULL == szFilename) || (0 == strlen(szFilename))) { CU_set_error(CUE_BAD_FILENAME); } else if (NULL == (pTestListFile = fopen(f_szTestListFileName, "w"))) { CU_set_error(CUE_FOPEN_FAILED); } else { setvbuf(pTestListFile, NULL, _IONBF, 0); fprintf(pTestListFile, "<?xml version=\"1.0\" ?> \n" "<?xml-stylesheet type=\"text/xsl\" href=\"CUnit-List.xsl\" ?> \n" "<!DOCTYPE CUNIT_TEST_LIST_REPORT SYSTEM \"CUnit-List.dtd\"> \n" "<CUNIT_TEST_LIST_REPORT> \n" " <CUNIT_HEADER/> \n" " <CUNIT_LIST_TOTAL_SUMMARY> \n"); fprintf(pTestListFile, " <CUNIT_LIST_TOTAL_SUMMARY_RECORD> \n" " <CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT> Total Number of Suites </CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT> \n" " <CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> %u </CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> \n" " </CUNIT_LIST_TOTAL_SUMMARY_RECORD> \n", pRegistry->uiNumberOfSuites); fprintf(pTestListFile, " <CUNIT_LIST_TOTAL_SUMMARY_RECORD> \n" " <CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT> Total Number of Test Cases </CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT> \n" " <CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> %u </CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> \n" " </CUNIT_LIST_TOTAL_SUMMARY_RECORD> \n" " </CUNIT_LIST_TOTAL_SUMMARY> \n", pRegistry->uiNumberOfTests); fprintf(pTestListFile, " <CUNIT_ALL_TEST_LISTING> \n"); pSuite = pRegistry->pSuite; while (NULL != pSuite) { pTest = pSuite->pTest; fprintf(pTestListFile, " <CUNIT_ALL_TEST_LISTING_SUITE> \n" " <CUNIT_ALL_TEST_LISTING_SUITE_DEFINITION> \n" " <SUITE_NAME> %s </SUITE_NAME> \n" " <INITIALIZE_VALUE> %s </INITIALIZE_VALUE> \n" " <CLEANUP_VALUE> %s </CLEANUP_VALUE> \n" " <TEST_COUNT_VALUE> %u </TEST_COUNT_VALUE> \n" " </CUNIT_ALL_TEST_LISTING_SUITE_DEFINITION> \n", (NULL != pSuite->pName) ? pSuite->pName : "", (NULL != pSuite->pInitializeFunc) ? "Yes" : "No", (NULL != pSuite->pCleanupFunc) ? "Yes" : "No", pSuite->uiNumberOfTests); fprintf(pTestListFile, " <CUNIT_ALL_TEST_LISTING_SUITE_TESTS> \n"); while (NULL != pTest) { fprintf(pTestListFile, " <TEST_CASE_NAME> %s </TEST_CASE_NAME> \n", (NULL != pTest->pName) ? pTest->pName : ""); pTest = pTest->pNext; } fprintf(pTestListFile, " </CUNIT_ALL_TEST_LISTING_SUITE_TESTS> \n" " </CUNIT_ALL_TEST_LISTING_SUITE> \n"); pSuite = pSuite->pNext; } fprintf(pTestListFile, " </CUNIT_ALL_TEST_LISTING> \n"); time(&tTime); szTime = ctime(&tTime); fprintf(pTestListFile, " <CUNIT_FOOTER> File Generated By CUnit v" CU_VERSION " at %s </CUNIT_FOOTER> \n" "</CUNIT_TEST_LIST_REPORT>", (NULL != szTime) ? szTime : ""); if (0 != fclose(pTestListFile)) { CU_set_error(CUE_FCLOSE_FAILED); } } return CU_get_error();}/** @} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -