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

📄 cuerror.c

📁 CUNIT
💻 C
字号:
/* *  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 *//* *	Error handling code used by CUnit * *	Created By      : Jerry St.Clair *  Created on      : 16-Jul-2004 *  Comment         : Created access functions for error code,  *                    error action functions, messages for new error codes. *  Email           : jds2@users.sourceforge.net * *//** @file * Error handling functions (implementation). *//** @addtogroup Framework @{*/#include <stdio.h>#include <stdlib.h>#include "CUError.h"       /* *	Global/Static Definitions *//** Local variable holding the current error code. */static CU_ErrorCode g_error_number = CUE_SUCCESS;/** Local variable holding the current error action code. */static CU_ErrorCode g_error_action = CUEA_IGNORE;/* Private function forward declarations */static const char* get_error_desc(CU_ErrorCode error);#ifdef CUNIT_DO_NOT_DEFINE_UNLESS_BUILDING_TESTSvoid test_exit(int status);#endif/*------------------------------------------------------------------------*//** Set the error code. * This function is used internally by CUnit implementation functions * when an error condition occurs within the framework.  It should * not generally be called by user code.  NOTE that if the current * error action is CUEA_ABORT, then calling this function will * result in exit() being called for the current application. * @param error CU_ErrorCode indicating the current error condition. * @see CU_get_error() * @see CU_get_error_msg() * @see CU_ErrorCode */void CU_set_error(CU_ErrorCode error){  if ((error != CUE_SUCCESS) && (g_error_action == CUEA_ABORT)) {#ifndef CUNIT_DO_NOT_DEFINE_UNLESS_BUILDING_TESTS    fprintf(stderr, "\nAborting due to error #%d: %s\n",            error,            get_error_desc(error));    exit(error);#else    test_exit(error);#endif  }  g_error_number = error;}/*------------------------------------------------------------------------*//** Get the error code. * CUnit implementation functions set the error code to indicate the * status of the most recent operation.  In general, the CUnit functions * will clear the code to CUE_SUCCESS, then reset it to a specific error * code if an exception condition is encountered.  Some functions * return the code, others leave it to the user to inspect if desired. * @return The current error condition code. * @see CU_get_error_msg() * @see CU_ErrorCode */CU_ErrorCode CU_get_error(void){	return g_error_number;}/*------------------------------------------------------------------------*//** Get the message corresponding to the error code. * CUnit implementation functions set the error code to indicate the * of the most recent operation.  In general, the CUnit functions will * clear the code to CUE_SUCCESS, then reset it to a specific error * code if an exception condition is encountered.  This function allows * the user to retrieve a descriptive error message corresponding to the * error code set by the last operation. * @return A message corresponding to the current error condition. * @see CU_get_error() * @see CU_ErrorCode */const char* CU_get_error_msg(void){	return get_error_desc(g_error_number);}/*------------------------------------------------------------------------*//** Set the action to take when an error condition occurs. * This function should be used to specify the action to take * when an error condition is encountered.  The default action is * CUEA_IGNORE, which results in errors being ignored and test runs * being continued (if possible).  A value of CUEA_FAIL causes test * runs to stop as soon as an error condition occurs, while * CU_ABORT causes the application to exit on any error. * @param action CU_ErrorAction indicating the new error action. * @see CU_get_error_action() * @see CU_set_error() * @see CU_ErrorAction */void CU_set_error_action(CU_ErrorAction action){  g_error_action = action;}/*------------------------------------------------------------------------*//** Get the current error action code. * @return The current error action code. * @see CU_set_error_action() * @see CU_set_error() * @see CU_ErrorAction */CU_ErrorAction CU_get_error_action(void){  return g_error_action;}/* *	Private static function definitions *//*------------------------------------------------------------------------*//** Internal function to look up the error message for a specified * error code.  An empty string is returned if iError is not a member * of CU_ErrorCode. * @param iError  CU_ErrorCode to look up. * @return Pointer to a string containing the error message. * @see CU_get_error_msg() */static const char* get_error_desc(CU_ErrorCode iError){	int iMaxIndex;	static const char* ErrorDescription[] = {		"No Error",                             /* CUE_SUCCESS - 0 */		"Memory allocation failed.",            /* CUE_NOMEMORY - 1 */		"",    "",    "",    "",    "",    "",    "",    "",		"Test registry does not exist.",          /* CUE_NOREGISTRY - 10 */		"Registry already exists.",               /* CUE_REGISTRY_EXISTS - 11 */		"",    "",    "",    "",    "",    "",    "",    "",		"NULL suite not allowed.",                /* CUE_NOSUITE - 20 */		"Suite name cannot be NULL.",             /* CUE_NO_SUITENAME - 21 */		"Suite initialization function failed.",  /* CUE_SINIT_FAILED - 22 */		"Suite cleanup function failed.",         /* CUE_SCLEAN_FAILED - 23 */		"Suite having name already registered.",  /* CUE_DUP_SUITE - 24 */		"",    "",    "",    "",    "",		"NULL test not allowed.",                 /* CUE_NOTEST - 30 */		"Test name cannot be NULL.",              /* CUE_NO_TESTNAME - 31 */		"Test having this name already in suite.",/* CUE_DUP_TEST - 32 */		"Test not registered in specified suite.",/* CUE_TEST_NOT_IN_SUITE - 33 */    "",    "",    "",    "",    "",    "",    "Error opening file.",                    /* CUE_FOPEN_FAILED - 40 */    "Error closing file.",                    /* CUE_FCLOSE_FAILED - 41 */    "Bad file name.",                         /* CUE_BAD_FILENAME - 42 */    "Error during write to file.",            /* CUE_WRITE_ERROR - 43 */    "Undefined Error"		};	iMaxIndex = sizeof(ErrorDescription)/sizeof(char *) - 1;	if ((int)iError > iMaxIndex)		return ErrorDescription[iMaxIndex];	else		return ErrorDescription[iError];}/** @} */#ifdef CUNIT_BUILD_TESTS#include "test_cunit.h"void test_cunit_CUError(void){  CU_ErrorCode old_err = CU_get_error();  CU_ErrorAction old_action = CU_get_error_action();  test_cunit_start_tests("CUError.c");  /* CU_set_error() & CU_get_error() */  CU_set_error(CUE_NOMEMORY);  TEST(CU_get_error() != CUE_SUCCESS);  TEST(CU_get_error() == CUE_NOMEMORY);  CU_set_error(CUE_NOREGISTRY);  TEST(CU_get_error() != CUE_SUCCESS);  TEST(CU_get_error() == CUE_NOREGISTRY);  /* CU_get_error_msg() */  CU_set_error(CUE_SUCCESS);  TEST(!strcmp(CU_get_error_msg(), get_error_desc(CUE_SUCCESS)));  CU_set_error(CUE_NOTEST);  TEST(!strcmp(CU_get_error_msg(), get_error_desc(CUE_NOTEST)));  CU_set_error(CUE_NOMEMORY);  TEST(!strcmp(CU_get_error_msg(), get_error_desc(CUE_NOMEMORY)));  TEST(strcmp(CU_get_error_msg(), get_error_desc(CUE_SCLEAN_FAILED)));  TEST(!strcmp(get_error_desc(100), "Undefined Error"));  /* CU_set_error_action() & CU_get_error_action() */  CU_set_error_action(CUEA_FAIL);  TEST(CU_get_error_action() != CUEA_IGNORE);  TEST(CU_get_error_action() == CUEA_FAIL);  TEST(CU_get_error_action() != CUEA_ABORT);  CU_set_error_action(CUEA_ABORT);  TEST(CU_get_error_action() != CUEA_IGNORE);  TEST(CU_get_error_action() != CUEA_FAIL);  TEST(CU_get_error_action() == CUEA_ABORT);  /* reset  values */  CU_set_error(old_err);  CU_set_error_action(old_action);  test_cunit_end_tests();}#endif    /* CUNIT_BUILD_TESTS */

⌨️ 快捷键说明

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