📄 automated.c
字号:
CU_pFailureRecord pTempFailure = pFailure; /* pSuite is not used except in assertion */ (void)pSuite; assert(f_pTestResultFile); if (pTempFailure) { /* worst cast is a string of special chars */ char szTemp[CUNIT_MAX_ENTITY_LEN * CUNIT_MAX_STRING_LENGTH]; while (pTempFailure) { assert(pTempFailure->pSuite && (pTempFailure->pSuite == pSuite)); assert(pTempFailure->pTest && (pTempFailure->pTest == pTest)); CU_translate_special_characters(pTempFailure->strCondition, szTemp, sizeof(szTemp)); 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", pTest->pName, 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", 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(); (void)pFailure; /* not used - quiet compiler warning */ assert(pRegistry); assert(pRunSummary); assert(f_pTestResultFile); if (f_pRunningSuite && 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" " <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" " <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" " <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", pRegistry->uiNumberOfSuites, pRunSummary->nSuitesRun, pRunSummary->nSuitesFailed, pRegistry->uiNumberOfTests, pRunSummary->nTestsRun, pRunSummary->nTestsRun - pRunSummary->nTestsFailed, pRunSummary->nTestsFailed, 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(pSuite); assert(f_pTestResultFile); if (f_bWriting_CUNIT_RUN_SUITE) { fprintf(f_pTestResultFile, " </CUNIT_RUN_SUITE_SUCCESS> \n" " </CUNIT_RUN_SUITE> \n"); f_bWriting_CUNIT_RUN_SUITE = 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", pSuite->pName, "Initialize 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(f_pTestResultFile); CU_set_error(CUE_SUCCESS); time(&tTime); szTime = ctime(&tTime); fprintf(f_pTestResultFile, " <CUNIT_FOOTER> File Generated By CUnit at %s </CUNIT_FOOTER> \n" "</CUNIT_TEST_RUN_REPORT>", szTime ? szTime : ""); if (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 (!pRegistry) { CU_set_error(CUE_NOREGISTRY); } else if ((!szFilename) || (!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" " <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> %d </CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> \n" " </CUNIT_LIST_TOTAL_SUMMARY_RECORD> \n" " <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> %d </CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> \n" " </CUNIT_LIST_TOTAL_SUMMARY_RECORD> \n" " </CUNIT_LIST_TOTAL_SUMMARY> \n", pRegistry->uiNumberOfSuites, pRegistry->uiNumberOfTests); fprintf(pTestListFile, " <CUNIT_ALL_TEST_LISTING> \n"); pSuite = pRegistry->pSuite; while (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> %d </TEST_COUNT_VALUE> \n" " </CUNIT_ALL_TEST_LISTING_SUITE_DEFINITION> \n", pSuite->pName, pSuite->pInitializeFunc ? "Yes" : "No", pSuite->pCleanupFunc ? "Yes" : "No", pSuite->uiNumberOfTests); fprintf(pTestListFile, " <CUNIT_ALL_TEST_LISTING_SUITE_TESTS> \n"); while (pTest) { fprintf(pTestListFile, " <TEST_CASE_NAME> %s </TEST_CASE_NAME> \n", 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 at %s </CUNIT_FOOTER> \n" "</CUNIT_TEST_LIST_REPORT>", 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 + -