⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 curses.c

📁 linux 下 C程序单元测试,可以实现交互模式和静态模式
💻 C
📖 第 1 页 / 共 3 页
字号:
        --pPad->uiPadRow;        (*parent_refresh)();      }      break;    case KEY_DOWN:      if (pPad->uiRows - 1 > pPad->uiPadRow + pPad->uiWinRows) {        ++pPad->uiPadRow;        (*parent_refresh)();      }      break;    case KEY_LEFT:      if (pPad->uiPadCol) {        --pPad->uiPadCol;        (*parent_refresh)();      }      break;    case KEY_RIGHT:      if (details_pad.uiColumns - 1 > details_pad.uiPadCol + details_pad.uiWinColumns) {        ++pPad->uiPadCol;        (*parent_refresh)();      }      break;    default:      break;  }}/*------------------------------------------------------------------------*//** Create a window having specified parent and dimensions. * @param pPad    Pointer to the new window. * @param pParent Parent window. * @param uiRows  Number of rows for new window. * @param uiCols  Number of columnss for new window. */static bool create_pad(APPPAD* pPad, WINDOW* pParent, unsigned int uiRows,    unsigned int uiCols){  bool bStatus = false;  assert(pParent);  if (pPad->pPad) {    delwin(pPad->pPad);  }  if (NULL != pPad && NULL == (pPad->pPad = newpad(uiRows, uiCols))) {    goto newpad_fail;  }  pPad->uiRows = uiRows;  pPad->uiColumns = uiCols;  pPad->uiPadRow = 0;  pPad->uiPadCol = 0;  pPad->uiWinLeft = application_windows.pDetailsWin->_begx + 1;  pPad->uiWinTop = application_windows.pDetailsWin->_begy + 1;  pPad->uiWinColumns = application_windows.pDetailsWin->_maxx - 2;  pPad->uiWinRows = application_windows.pDetailsWin->_maxy - 2;  bStatus = true;newpad_fail:  return bStatus;}/*------------------------------------------------------------------------*//** Print a list of registered suites in the detail window. * @param pRegistry The CU_pTestRegistry to query (non-NULL). */static void list_suites(CU_pTestRegistry pRegistry){  CU_pSuite pCurSuite = NULL;  int i;  if (NULL == pRegistry) {    pRegistry = CU_get_registry();  }    assert(pRegistry);    if (!create_pad(&details_pad, application_windows.pDetailsWin,          pRegistry->uiNumberOfSuites == 0 ? 1 : pRegistry->uiNumberOfSuites + 4, 256)) {    return;  }  if (0 == pRegistry->uiNumberOfSuites) {    mvwprintw(details_pad.pPad, 0, 0, "%s", "No test suites defined.");    refresh_details_window();    return;  }  assert(pRegistry->pSuite);  mvwprintw(details_pad.pPad, 0, 0, "%s", "     Suite Name                          Init?  Cleanup?  # Tests");  for (i = 0, pCurSuite = pRegistry->pSuite; pCurSuite; pCurSuite = pCurSuite->pNext, i++) {    char szTemp[256];    snprintf(szTemp, sizeof(szTemp), "%3d. %-34.33s   %3s     %3s       %3d",             i + 1,             pCurSuite->pName,             pCurSuite->pInitializeFunc ? "YES" : "NO",             pCurSuite->pCleanupFunc ? "YES" : "NO",             pCurSuite->uiNumberOfTests);    mvwprintw(details_pad.pPad, i + 2, 0, "%s", szTemp);  }  mvwprintw(details_pad.pPad, i + 2, 0, "%s", "------------------------------------------------------------------");  mvwprintw(details_pad.pPad, i + 3, 0, "Total Number of Test Suites : %-d", pRegistry->uiNumberOfSuites);  refresh_details_window();}/*------------------------------------------------------------------------*//** Print a list of tests contained in a specified suite  * in the detail window. * @param pSuite  The suite to query (non-NULL). */static void list_tests(CU_pSuite pSuite){  CU_pTest pCurTest = NULL;  int i;  assert(pSuite);  if (!create_pad(&details_pad, application_windows.pDetailsWin,          pSuite->uiNumberOfTests == 0 ? 1 : pSuite->uiNumberOfTests + 4, 256)) {    return;  }  if (0 == pSuite->uiNumberOfTests) {    mvwprintw(details_pad.pPad, 0, 0, "Suite %s contains no tests.", pSuite->pName);    refresh_details_window();    return;  }  assert(pSuite->pTest);  mvwprintw(details_pad.pPad, 0, 0, "      Tests in suite %s", pSuite->pName);  for (i = 0, pCurTest = pSuite->pTest; pCurTest; pCurTest = pCurTest->pNext, i++) {    char szTemp[256];    snprintf(szTemp, sizeof(szTemp), "%3d.  %s", i + 1, pCurTest->pName);    mvwprintw(details_pad.pPad, i + 2, 0, "%s", szTemp);  }  mvwprintw(details_pad.pPad, i + 2, 0, "%s", "---------------------------------------------");  mvwprintw(details_pad.pPad, i + 3, 0, "Total Number of Tests : %-d", pSuite->uiNumberOfTests);  refresh_details_window();}/*------------------------------------------------------------------------*//** Display the record of test failures in the detail window. */static void show_failures(void){  int i;  CU_pFailureRecord pFailure = CU_get_failure_list();  unsigned int nFailures = CU_get_number_of_failures();  if (!create_pad(&details_pad, application_windows.pDetailsWin,          nFailures == 0 ? 1 : nFailures + 5, 256)) {    return;  }  if (0 == nFailures) {    mvwprintw(details_pad.pPad, 0, 0, "%s", "No Failures.");    refresh_details_window();    return;  }  assert(pFailure);  mvwprintw(details_pad.pPad, 1, 0, "%s", "   src_file:line# : (suite:test) : failure_condition");  for (i = 0 ; pFailure ; pFailure = pFailure->pNext, i++) {    char szTemp[256];    snprintf(szTemp, 256, "%d. %s:%d : (%s : %s) : %s", i + 1,        pFailure->strFileName ? pFailure->strFileName : "",        pFailure->uiLineNumber,        pFailure->pSuite ? pFailure->pSuite->pName : "",        pFailure->pTest ? pFailure->pTest->pName : "",        pFailure->strCondition ? pFailure->strCondition : "");    mvwprintw(details_pad.pPad, i + 3, 0, "%s", szTemp);  }  mvwprintw(details_pad.pPad, i + 3, 0, "%s", "=============================================");  mvwprintw(details_pad.pPad, i + 4, 0, "Total Number of Failures : %-d", nFailures);  refresh_details_window();}/*------------------------------------------------------------------------*//** Run all tests within the curses interface. * The test registry is changed to the specified registry * before running the tests, and reset to the original * registry when done. * @param pRegistry The CU_pTestRegistry containing the tests *                  to be run (non-NULL). * @return An error code indicating the error status *         during the test run. */static CU_ErrorCode curses_run_all_tests(CU_pTestRegistry pRegistry){  CU_pTestRegistry pOldRegistry = NULL;  CU_ErrorCode result;  assert(pRegistry);  reset_run_parameters();  f_uiTotalTests = pRegistry->uiNumberOfTests;  f_uiTotalSuites = pRegistry->uiNumberOfSuites;  if (NULL != pRegistry) {    pOldRegistry = CU_set_registry(pRegistry);  }  result = CU_run_all_tests();  if (NULL != pOldRegistry) {    CU_set_registry(pOldRegistry);  }  return result;}/*------------------------------------------------------------------------*//** Run a specified suite within the curses interface. * @param pSuite The suite to be run (non-NULL). * @return An error code indicating the error status *         during the test run. */static CU_ErrorCode curses_run_suite_tests(CU_pSuite pSuite){  reset_run_parameters();  f_uiTotalTests = pSuite->uiNumberOfTests;  f_uiTotalSuites = 1;  return CU_run_suite(pSuite);}/*------------------------------------------------------------------------*//** Run a specific test for the specified suite within  * the curses interface. * @param pSuite The suite containing the test to be run (non-NULL). * @param pTest  The test to be run (non-NULL). * @return An error code indicating the error status *         during the test run. */static CU_ErrorCode curses_run_single_test(CU_pSuite pSuite, CU_pTest pTest){  reset_run_parameters();  f_uiTotalTests = 1;  f_uiTotalSuites = 1;  return CU_run_test(pSuite, pTest);}/*------------------------------------------------------------------------*//** Reset the local run counters and prepare for a test run. */static void reset_run_parameters(void){  f_pCurrentTest = NULL;  f_pCurrentSuite = NULL;  f_uiTestsRunSuccessful = f_uiTestsRun = f_uiTotalTests = f_uiTestsFailed = f_uiTestsSkipped = 0;  f_uiTotalSuites = f_uiSuitesSkipped = 0;  refresh_progress_window();  refresh_summary_window();  refresh_run_summary_window();}/*------------------------------------------------------------------------*//** Handler function called at start of each test. * @param pTest  The test being run. * @param pSuite The suite containing the test. */static void curses_test_start_message_handler(const CU_pTest pTest, const CU_pSuite pSuite){  f_pCurrentTest = (CU_pTest)pTest;  f_pCurrentSuite = (CU_pSuite)pSuite;  refresh_run_summary_window();}/*------------------------------------------------------------------------*//** Handler function called at completion of each test. * @param pTest   The test being run. * @param pSuite  The suite containing the test. * @param pFailure Pointer to the 1st failure record for this test. */static void curses_test_complete_message_handler(const CU_pTest pTest,                                                 const CU_pSuite pSuite,                                                 const CU_pFailureRecord pFailure){  /* Not used in curses implementation - quiet compiler warning */  CU_UNREFERENCED_PARAMETER(pTest);  CU_UNREFERENCED_PARAMETER(pSuite);  CU_UNREFERENCED_PARAMETER(pFailure);  f_uiTestsRun++;  if (CU_get_number_of_tests_failed() != f_uiTestsFailed) {    f_uiTestsFailed++;  }  else {    f_uiTestsRunSuccessful++;  }  refresh_summary_window();  refresh_progress_window();}/*------------------------------------------------------------------------*//** Handler function called at completion of all tests in a suite. * @param pFailure Pointer to the test failure record list. */static void curses_all_tests_complete_message_handler(const CU_pFailureRecord pFailure){  /* Not used in curses implementation - quiet compiler warning */  CU_UNREFERENCED_PARAMETER(pFailure);  f_pCurrentTest = NULL;  f_pCurrentSuite = NULL;  if (!create_pad(&details_pad, application_windows.pDetailsWin, 16 , 256)) {    return;  }  mvwprintw(details_pad.pPad, 0, 0, "%s", "======  Suite Run Summary  ======");  mvwprintw(details_pad.pPad, 1, 0, "  TOTAL SUITES: %4u", f_uiTotalSuites);  mvwprintw(details_pad.pPad, 2, 0, "           Run: %4u", f_uiTotalSuites - f_uiSuitesSkipped);  mvwprintw(details_pad.pPad, 3, 0, "       Skipped: %4u", f_uiSuitesSkipped);  mvwprintw(details_pad.pPad, 5, 0, "%s", "======  Test Run Summary  =======");  mvwprintw(details_pad.pPad, 6, 0, "  TOTAL TESTS: %4u", f_uiTotalTests);  mvwprintw(details_pad.pPad, 7, 0, "          Run: %4u", f_uiTestsRun);  mvwprintw(details_pad.pPad, 8, 0, "      Skipped: %4u", f_uiTestsSkipped);  mvwprintw(details_pad.pPad, 9, 0, "   Successful: %4u", f_uiTestsRunSuccessful);  mvwprintw(details_pad.pPad, 10, 0, "       Failed: %4u", f_uiTestsFailed);  mvwprintw(details_pad.pPad, 12, 0, "%s", "======  Assertion Summary  ======");  mvwprintw(details_pad.pPad, 13, 0, "  TOTAL ASSERTS: %4u", CU_get_number_of_asserts());  mvwprintw(details_pad.pPad, 14, 0, "         Passed: %4u", CU_get_number_of_successes());  mvwprintw(details_pad.pPad, 15, 0, "         Failed: %4u", CU_get_number_of_failures());  refresh_details_window();  refresh_run_summary_window();}/*------------------------------------------------------------------------*//** Handler function called when suite initialization fails. * @param pSuite The suite for which initialization failed. */static void curses_suite_init_failure_message_handler(const CU_pSuite pSuite){  assert(pSuite);  f_uiTestsSkipped += pSuite->uiNumberOfTests;  f_uiSuitesSkipped++;  refresh_summary_window();  refresh_progress_window();}/** @} */                              

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -