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

📄 console.c

📁 CUNIT
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *  CUnit - A Unit testing framework library for C. *  Copyright (C) 2001  Anil Kumar *  Copyright (C) 2004  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 *//* *  Contains the Console Test Interface  implementation. * *  Created By     : Anil Kumar on ...(in month of Aug 2001) *  Last Modified  : 19/Aug/2001 *  Comment        : Added initial console interface functions without *                   any run functionality. *  Email          : aksaharan@yahoo.com * *  Modified       : 24/Aug/2001 by Anil Kumar *  Comment        : Added compare_strings, show_errors, list_suites, *                   list_tests function declarations. *  Email          : aksaharan@yahoo.com * *  Modified       : 17-Jul-2004 (JDS) *  Comment        : New interface, doxygen comments, reformat console output *  Email          : jds2@users.sourceforge.net *//** @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;/** 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 CU_ErrorCode select_test(CU_pSuite pSuite, CU_pTest* pTest);static CU_ErrorCode select_suite(CU_pTestRegistry pRegistry, CU_pSuite* pSuite);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){  CU_pTestRegistry pRegistry = CU_get_registry();  /*   *   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."                  "\n     http://cunit.sourceforge.net/\n\n");  if (NULL == pRegistry) {    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);    console_registry_level_run(pRegistry);  }}/*------------------------------------------------------------------------*//** Main loop for console interface. * Displays actions and responds based on user imput. * @param pRegistry The CU_pTestRegistry to use for testing (non-NULL). */static void console_registry_level_run(CU_pTestRegistry pRegistry){  int chChoice;  char szTemp[256];  CU_pSuite pSuite = NULL;  STATUS eStatus = CONTINUE;  assert(pRegistry);  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(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. * @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 console_run_all_tests(CU_pTestRegistry pRegistry){  CU_pTestRegistry pOldRegistry = NULL;  CU_ErrorCode result;  assert(pRegistry);  f_pRunningSuite = NULL;  pOldRegistry = CU_set_registry(pRegistry);  result = CU_run_all_tests();

⌨️ 快捷键说明

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