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

📄 console.c

📁 linux 下 C程序单元测试,可以实现交互模式和静态模式
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *  CUnit - A Unit testing framework library for C. *  Copyright (C) 2001            Anil Kumar *  Copyright (C) 2004,2005,2006  Anil Kumar, Jerry St.Clair * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Library General Public *  License as published by the Free Software Foundation; either *  version 2 of the License, or (at your option) any later version. * *  This library is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *  Library General Public License for more details. * *  You should have received a copy of the GNU Library General Public *  License along with this library; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *//* *  Implementation of the Console Test Interface. * *  Aug 2001      Initial implementation (AK) * *  19/Aug/2001   Added initial console interface functions without *                any run functionality. (AK) * *  24/Aug/2001   Added compare_strings, show_errors, list_suites, *                list_tests function declarations. (AK) * *  17-Jul-2004   New interface, doxygen comments, reformat console output. (JDS) * *  30-Apr-2005   Added notification of suite cleanup failure. (JDS) *//** @file * Console test interface with interactive output (implementation). *//** @addtogroup Console @{*/#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <assert.h>#include <string.h>#include "CUnit.h"#include "TestDB.h"#include "Util.h"#include "TestRun.h"#include "Console.h"/** Console interface status flag. */typedef enum{  CONTINUE = 1,   /**< Continue processing commands in current menu. */  MOVE_UP,        /**< Move up to the previous menu. */  STOP            /**< Stop processing (user selected 'Quit'). */} STATUS;/** Pointer to the currently running suite. */static CU_pSuite f_pRunningSuite = NULL;/* Forward declaration of module functions */static void console_registry_level_run(CU_pTestRegistry pRegistry);static STATUS console_suite_level_run(CU_pSuite pSuite);static CU_ErrorCode console_run_all_tests(CU_pTestRegistry pRegistry);static CU_ErrorCode console_run_suite(CU_pSuite pSuite);static CU_ErrorCode console_run_single_test(CU_pSuite pSuite, CU_pTest pTest);static void console_test_start_message_handler(const CU_pTest pTest, const CU_pSuite pSuite);static void console_test_complete_message_handler(const CU_pTest pTest, const CU_pSuite pSuite, const CU_pFailureRecord pFailure);static void console_all_tests_complete_message_handler(const CU_pFailureRecord pFailure);static void console_suite_init_failure_message_handler(const CU_pSuite pSuite);static void console_suite_cleanup_failure_message_handler(const CU_pSuite pSuite);static CU_ErrorCode select_test(CU_pSuite pSuite, CU_pTest* ppTest);static CU_ErrorCode select_suite(CU_pTestRegistry pRegistry, CU_pSuite* ppSuite);static void list_suites(CU_pTestRegistry pRegistry);static void list_tests(CU_pSuite pSuite);static void show_failures(void);/*------------------------------------------------------------------------*//** Run registered CUnit tests using the console interface. */void CU_console_run_tests(void){  /*   *   To avoid user from cribbing about the output not coming onto   *   screen at the moment of SIGSEGV.   */  setvbuf(stdout, NULL, _IONBF, 0);  setvbuf(stderr, NULL, _IONBF, 0);  fprintf(stdout, "\n\n     CUnit - A Unit testing framework for C - Version " CU_VERSION                  "\n     http://cunit.sourceforge.net/\n\n");  if (NULL == CU_get_registry()) {    fprintf(stderr, "\n\nFATAL ERROR - Test registry is not initialized.\n");    CU_set_error(CUE_NOREGISTRY);  }  else {    CU_set_test_start_handler(console_test_start_message_handler);    CU_set_test_complete_handler(console_test_complete_message_handler);    CU_set_all_test_complete_handler(console_all_tests_complete_message_handler);    CU_set_suite_init_failure_handler(console_suite_init_failure_message_handler);    CU_set_suite_cleanup_failure_handler(console_suite_cleanup_failure_message_handler);    console_registry_level_run(NULL);  }}/*------------------------------------------------------------------------*//** Main loop for console interface. *  Displays actions and responds based on user imput. *  If pRegistry is NULL, will use the default internal CUnit *  test registry. *  @param pRegistry The CU_pTestRegistry to use for testing. */static void console_registry_level_run(CU_pTestRegistry pRegistry){  int chChoice;  char szTemp[256];  CU_pSuite pSuite = NULL;  STATUS eStatus = CONTINUE;  while (CONTINUE == eStatus)  {    fprintf(stdout, "\n*************** CUNIT CONSOLE - MAIN MENU ***********************"                    "\n(R)un all, (S)elect suite, (L)ist suites, Show (F)ailures, (Q)uit"                    "\nEnter Command : ");    chChoice = getchar();    fgets(szTemp, sizeof(szTemp), stdin);    switch (tolower(chChoice)) {      case 'r':        console_run_all_tests(pRegistry);        break;      case 's':        if (CUE_SUCCESS == select_suite(pRegistry, &pSuite)) {          if (STOP == console_suite_level_run(pSuite)) {            eStatus = STOP;          }        }        else {          fprintf(stdout, "\nSuite not found.\n");        }        break;      case 'l':        list_suites(pRegistry);        break;      case 'f':        show_failures();        break;      case 'q':        eStatus = STOP;        break;      /* To stop gcc from cribbing */      default:        break;    }  }}/*------------------------------------------------------------------------*//** Run a selected suite within the console interface. *  Displays actions and responds based on user imput. *  @param pSuite The suite to use for testing (non-NULL). */static STATUS console_suite_level_run(CU_pSuite pSuite){  int chChoice;  char szTemp[256];  CU_pTest pTest = NULL;  STATUS eStatus = CONTINUE;  assert(NULL != pSuite);  while (CONTINUE == eStatus) {    fprintf(stdout, "\n*************** CUNIT CONSOLE - SUITE MENU *******************************"                    "\n(R)un All, (S)elect test, (L)ist tests, Show (F)ailures, (M)ove up, (Q)uit"                    "\nEnter Command : ");    chChoice = getchar();    fgets(szTemp, sizeof(szTemp), stdin);    switch (tolower(chChoice)) {      case 'r':        console_run_suite(pSuite);        break;      case 's':        if (CUE_SUCCESS == select_test(pSuite, &pTest)) {          console_run_single_test(pSuite, pTest);        }        break;      case 'l':        list_tests(pSuite);        break;      case 'f':        show_failures();        break;      case 'm':        eStatus = MOVE_UP;        break;      case 'q':        eStatus = STOP;        break;      /* To stop gcc from cribbing */      default:        break;    }  }  return eStatus;}/*------------------------------------------------------------------------*//** Run all tests within the console interface. *  The test registry is changed to the specified registry *  before running the tests, and reset to the original *  registry when done.  If pRegistry is NULL, the default *  internal CUnit test registry is used. *  @param pRegistry The CU_pTestRegistry containing the tests *                   to be run. *  @return An error code indicating the error status *          during the test run. */static CU_ErrorCode console_run_all_tests(CU_pTestRegistry pRegistry){  CU_pTestRegistry pOldRegistry = NULL;  CU_ErrorCode result;  f_pRunningSuite = NULL;  if (NULL != pRegistry) {    pOldRegistry = CU_set_registry(pRegistry);  }  result = CU_run_all_tests();  if (NULL != pRegistry) {    CU_set_registry(pOldRegistry);  }  return result;}/*------------------------------------------------------------------------*//** Run a specified suite within the console interface. *  @param pSuite The suite to be run (non-NULL). *  @return An error code indicating the error status *          during the test run. */

⌨️ 快捷键说明

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