📄 testdb.c
字号:
{ return CU_register_nsuites(1, suite_info);}/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*//* * Private static function definitions *//*------------------------------------------------------------------------*//** Internal function to clean up the specified test registry. * cleanup_suite() will be called for each registered suite to perform * cleanup of the associated test cases. Then, the suite's memory will * be freed. Note that any pointers to tests or suites in pRegistry * held by the user will be invalidated by this function. Severe problems * can occur if this function is called during a test run involving pRegistry. * Note that memory held for data members in the registry (e.g. pName) and * the registry itself are not freed by this function. * @see cleanup_suite() * @see cleanup_test() * @param pRegistry CU_pTestRegistry to clean up (non-NULL). */static void cleanup_test_registry(CU_pTestRegistry pRegistry){ CU_pSuite pCurSuite = NULL; CU_pSuite pNextSuite = NULL; assert(NULL != pRegistry); pCurSuite = pRegistry->pSuite; while (NULL != pCurSuite) { pNextSuite = pCurSuite->pNext; cleanup_suite(pCurSuite); CU_FREE(pCurSuite); pCurSuite = pNextSuite; } pRegistry->pSuite = NULL; pRegistry->uiNumberOfSuites = 0; pRegistry->uiNumberOfTests = 0;}/*------------------------------------------------------------------------*//** Internal function to create a new test suite having the specified parameters. * This function creates a new test suite having the specified * name and initialization/cleanup functions. The strName cannot * be NULL (checked by assertion), but either or both function * pointers can be. A pointer to the newly-created suite is returned, * or NULL if there was an error allocating memory for the new suite. * It is the responsibility of the caller to destroy the returned * suite (use cleanup_suite() before freeing the returned pointer). * @param strName Name for the new test suite (non-NULL). * @param pInit Initialization function to call before running suite. * @param pClean Cleanup function to call after running suite. * @return A pointer to the newly-created suite (NULL if creation failed) */static CU_pSuite create_suite(const char* strName, CU_InitializeFunc pInit, CU_CleanupFunc pClean){ CU_pSuite pRetValue = (CU_pSuite)CU_MALLOC(sizeof(CU_Suite)); assert(NULL != strName); if (NULL != pRetValue) { pRetValue->pName = (char *)CU_MALLOC(strlen(strName)+1); if (NULL != pRetValue->pName) { strcpy(pRetValue->pName, strName); pRetValue->pInitializeFunc = pInit; pRetValue->pCleanupFunc = pClean; pRetValue->pTest = NULL; pRetValue->pNext = NULL; pRetValue->pPrev = NULL; pRetValue->uiNumberOfTests = 0; } else { CU_FREE(pRetValue); pRetValue = NULL; } } return pRetValue;}/*------------------------------------------------------------------------*//** Internal function to clean up the specified test suite. * Each test case registered with pSuite will be freed. * Allocated memory held by the suite (i.e. the name) * will also be deallocated. * Severe problems can occur if this function is called * during a test run involving pSuite. * @see cleanup_test_registry() * @see cleanup_test() * @param pSuite CU_pSuite to clean up (non-NULL). */static void cleanup_suite(CU_pSuite pSuite){ CU_pTest pCurTest = NULL; CU_pTest pNextTest = NULL; assert(NULL != pSuite); pCurTest = pSuite->pTest; while (NULL != pCurTest) { pNextTest = pCurTest->pNext; cleanup_test(pCurTest); CU_FREE(pCurTest); pCurTest = pNextTest; } if (NULL != pSuite->pName) { CU_FREE(pSuite->pName); } pSuite->pName = NULL; pSuite->pTest = NULL; pSuite->uiNumberOfTests = 0;}/*------------------------------------------------------------------------*//** Internal function to insert a suite into a registry. * The suite name is assumed to be unique. Internally, the list * of suites is a double-linked list, which this function manages. * Insertion of duplicate (or NULL) pSuites is not allowed, both * of which are checked by assertion. * Severe problems can occur if this function is called during a * test run involving pRegistry. * @param pRegistry CU_pTestRegistry to insert into (non-NULL). * @param pSuite CU_pSuite to insert (non-NULL). * @see insert_test() */static void insert_suite(CU_pTestRegistry pRegistry, CU_pSuite pSuite){ CU_pSuite pCurSuite = NULL; assert(NULL != pRegistry); assert(NULL != pSuite); pCurSuite = pRegistry->pSuite; assert(pCurSuite != pSuite); pSuite->pNext = NULL; pRegistry->uiNumberOfSuites++; /* if this is the 1st suite to be added... */ if (NULL == pCurSuite) { pRegistry->pSuite = pSuite; pSuite->pPrev = NULL; } /* otherwise, add it to the end of the linked list... */ else { while (NULL != pCurSuite->pNext) { pCurSuite = pCurSuite->pNext; assert(pCurSuite != pSuite); } pCurSuite->pNext = pSuite; pSuite->pPrev = pCurSuite; }}/*------------------------------------------------------------------------*//** Internal function to create a new test case having the specified parameters. * This function creates a new test having the specified name and * test function. The strName cannot be NULL (checked by assertion), * but the function pointer may be. A pointer to the newly-created * test is returned, or NULL if there was an error allocating memory for * the new test. It is the responsibility of the caller to destroy the * returned test (use cleanup_test() before freeing the returned pointer). * @param strName Name for the new test. * @param pTestFunc Test function to call when running this test. * @return A pointer to the newly-created test (NULL if creation failed) */static CU_pTest create_test(const char* strName, CU_TestFunc pTestFunc){ CU_pTest pRetValue = (CU_pTest)CU_MALLOC(sizeof(CU_Test)); assert(NULL != strName); if (NULL != pRetValue) { pRetValue->pName = (char *)CU_MALLOC(strlen(strName)+1); if (NULL != pRetValue->pName) { strcpy(pRetValue->pName, strName); pRetValue->pTestFunc = pTestFunc; pRetValue->pJumpBuf = NULL; pRetValue->pNext = NULL; pRetValue->pPrev = NULL; } else { CU_FREE(pRetValue); pRetValue = NULL; } } return pRetValue;}/*------------------------------------------------------------------------*//** Internal function to clean up the specified test. * All memory associated with the test will be freed. * Severe problems can occur if this function is called * during a test run involving pTest. * @see cleanup_test_registry() * @see cleanup_suite() * @param pTest CU_pTest to clean up (non-NULL). */static void cleanup_test(CU_pTest pTest){ assert(NULL != pTest); if (NULL != pTest->pName) { CU_FREE(pTest->pName); } pTest->pName = NULL;}/*------------------------------------------------------------------------*//** Internal function to insert a test into a suite. * The test name is assumed to be unique. Internally, the list * of tests in a suite is a double-linked list, which this * function manages. Insertion of duplicate tests (or NULL * pTest) is not allowed (checked by assertion). Further, * pTest must be an independent test (i.e. both pTest->pNext * and pTest->pPrev == NULL), which is also checked by assertion. * Severe problems can occur if this function is called during * a test run involving pSuite. * @param pSuite CU_pSuite to insert into (non-NULL). * @param pTest CU_pTest to insert (non-NULL). * @see insert_suite() */static void insert_test(CU_pSuite pSuite, CU_pTest pTest){ CU_pTest pCurTest = NULL; assert(NULL != pSuite); assert(NULL != pTest); assert(NULL == pTest->pNext); assert(NULL == pTest->pPrev); pCurTest = pSuite->pTest; assert(pCurTest != pTest); pSuite->uiNumberOfTests++; /* if this is the 1st suite to be added... */ if (NULL == pCurTest) { pSuite->pTest = pTest; pTest->pPrev = NULL; } else { while (NULL != pCurTest->pNext) { pCurTest = pCurTest->pNext; assert(pCurTest != pTest); } pCurTest->pNext = pTest; pTest->pPrev = pCurTest; }}/*------------------------------------------------------------------------*//** Internal function to check whether a suite having a specified * name already exists. * @param pRegistry CU_pTestRegistry to check (non-NULL). * @param szSuiteName Suite name to check (non-NULL). * @return CU_TRUE if suite exists in the registry, CU_FALSE otherwise. */static CU_BOOL suite_exists(CU_pTestRegistry pRegistry, const char* szSuiteName){ CU_pSuite pSuite = NULL; assert(NULL != pRegistry); assert(NULL != szSuiteName); pSuite = pRegistry->pSuite; while (NULL != pSuite) { if ((NULL != pSuite->pName) && (0 == CU_compare_strings(szSuiteName, pSuite->pName))) { return CU_TRUE; } pSuite = pSuite->pNext; } return CU_FALSE;}/*------------------------------------------------------------------------*//** Internal function to check whether a test having a specified * name is already registered in a given suite. * @param pSuite CU_pSuite to check (non-NULL). * @param szTestName Test case name to check (non-NULL). * @return CU_TRUE if test exists in the suite, CU_FALSE otherwise. */static CU_BOOL test_exists(CU_pSuite pSuite, const char* szTestName){ CU_pTest pTest = NULL; assert(NULL != pSuite); assert(NULL != szTestName); pTest = pSuite->pTest; while (NULL != pTest) { if ((NULL != pTest->pName) && (0 == CU_compare_strings(szTestName, pTest->pName))) { return CU_TRUE; } pTest = pTest->pNext; } return CU_FALSE;}/*------------------------------------------------------------------------*//** Create and initialize a new test registry. * Returns a pointer to a new, initialized registry (NULL if * memory could not be allocated). It is the caller's * responsibility to destroy and free the new registry * (unless it is made the active test registry using * CU_set_registry(). */CU_pTestRegistry CU_create_new_registry(void){ CU_pTestRegistry pRegistry = (CU_pTestRegistry)CU_MALLOC(sizeof(CU_TestRegistry)); if (NULL != pRegistry) { pRegistry->pSuite = NULL; pRegistry->uiNumberOfSuites = 0; pRegistry->uiNumberOfTests = 0; } return pRegistry;}/*------------------------------------------------------------------------*//** Destroy and free all memory for an existing test registry. * The active test registry is destroyed by the CUnit system in * CU_cleanup_registry(), so only call this function on registries * created or held independently of the internal CUnit system.<br /><br /> * * Once a registry is made the active test registry using * CU_set_registry(), its destruction will be handled by the * framework. ppRegistry may not be NULL (checked by assertion), * but *ppRegistry can be NULL (in which case the function has no * effect). Note that *ppRegistry will be set to NULL on return. * @param ppRegistry Address of a pointer to the registry to destroy (non-NULL). */void CU_destroy_existing_registry(CU_pTestRegistry* ppRegistry){ assert(NULL != ppRegistry); /* Note - CU_cleanup_registry counts on being able to pass NULL */ if (NULL != *ppRegistry) { cleanup_test_registry(*ppRegistry); } CU_FREE(*ppRegistry); *ppRegistry = NULL;}/*------------------------------------------------------------------------*//** Retrieve a pointer to the suite having the specified name. * Scans the pRegistry and returns a pointer to the first * suite located having the specified name. * @param szSuiteName The name of the suite to locate. * @param pRegistry The registry to scan. * @return Pointer to the first suite having the specified name, * NULL if not found. */CU_pSuite CU_get_suite_by_name(const char* szSuiteName, CU_pTestRegistry pRegistry){ CU_pSuite pSuite = NULL; CU_pSuite pCur = NULL; assert(NULL != pRegistry); assert(NULL != szSuiteName); pCur = pRegistry->pSuite; while (NULL != pCur) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -