📄 curses.c
字号:
--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 + -