📄 testdb.c
字号:
/* 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) {
if ((NULL != pCur->pName) && (0 == CU_compare_strings(pCur->pName, szSuiteName))) {
pSuite = pCur;
break;
}
pCur = pCur->pNext;
}
return pSuite;
}
/*------------------------------------------------------------------------*/
/** Retrieve a pointer to the test case having the specified name.
* Scans the pSuite and returns a pointer to the first
* test case located having the specified name.
* @param szTestName The name of the test case to locate.
* @param pSuite The suite to scan.
* @return Pointer to the first test case having the specified name,
* NULL if not found.
*/
CU_pTest CU_get_test_by_name(const char* szTestName, CU_pSuite pSuite)
{
CU_pTest pTest = NULL;
CU_pTest pCur = NULL;
assert(NULL != pSuite);
assert(NULL != szTestName);
pCur = pSuite->pTest;
while (NULL != pCur) {
if ((NULL != pCur->pName) && (0 == CU_compare_strings(pCur->pName, szTestName))) {
pTest = pCur;
break;
}
pCur = pCur->pNext;
}
return pTest;
}
/** @} */
/*------------------------------------------------------------------------*/
/*------------------------------------------------------------------------*/
#ifdef CUNIT_BUILD_TESTS
#include "test_cunit.h"
static int sfunc1(void)
{
return 0;
}
static void test1(void)
{
}
/*--------------------------------------------------*/
static void test_CU_initialize_registry(void)
{
CU_pTestRegistry pReg = NULL;
unsigned int ndeallocs_before;
/* initial state */
TEST(NULL == CU_get_registry());
TEST(CU_FALSE == CU_registry_initialized());
/* after normal initialization */
TEST(CUE_SUCCESS == CU_initialize_registry());
pReg = CU_get_registry();
TEST_FATAL(NULL != pReg);
TEST(CU_TRUE == CU_registry_initialized());
TEST(0 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
TEST(NULL == pReg->pSuite);
/* after reinitialization */
TEST(0 < test_cunit_get_n_memevents(pReg));
ndeallocs_before = test_cunit_get_n_deallocations(pReg);
TEST(CUE_SUCCESS == CU_initialize_registry());
TEST((ndeallocs_before + 1) == test_cunit_get_n_deallocations(pReg));
pReg = CU_get_registry();
TEST_FATAL(NULL != pReg);
TEST(0 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
TEST(NULL == pReg->pSuite);
/* after cleanup */
CU_cleanup_registry();
TEST(NULL == CU_get_registry());
TEST(CU_FALSE == CU_registry_initialized());
/* if malloc fails */
test_cunit_deactivate_malloc();
TEST(CUE_NOMEMORY == CU_initialize_registry());
TEST(NULL == CU_get_registry());
TEST(CU_FALSE == CU_registry_initialized());
test_cunit_activate_malloc();
}
/*--------------------------------------------------*/
static void test_CU_cleanup_registry(void)
{
/* make sure calling with uninitialized registry does not crash */
CU_cleanup_registry();
CU_cleanup_registry();
CU_cleanup_registry();
CU_cleanup_registry();
CU_cleanup_registry();
/* nothing more to do over test_CU_initialize_registry() */
}
/*--------------------------------------------------*/
static void test_CU_add_suite(void)
{
CU_pSuite pSuite = NULL;
CU_pSuite pSuite2 = NULL;
CU_pSuite pSuite3 = NULL;
CU_pSuite pSuite4 = NULL;
CU_pTestRegistry pReg = NULL;
CU_cleanup_registry(); /* make sure registry not initialized */
/* error condition - registry not initialized */
pSuite = CU_add_suite("suite1", NULL, NULL);
TEST(CUE_NOREGISTRY == CU_get_error());
TEST(NULL == pSuite);
/* error condition - no name */
CU_initialize_registry();
pReg = CU_get_registry();
pSuite = CU_add_suite(NULL, NULL, NULL);
TEST(CUE_NO_SUITENAME == CU_get_error());
TEST(NULL == pSuite);
TEST(0 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
/* error condition - duplicate name */
CU_initialize_registry();
pReg = CU_get_registry();
pSuite = CU_add_suite("suite1", NULL, NULL);
TEST(CUE_SUCCESS == CU_get_error());
TEST(NULL != pSuite);
TEST(1 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
pSuite = CU_add_suite("suite1", NULL, NULL);
TEST(CUE_DUP_SUITE == CU_get_error());
TEST(NULL == pSuite);
TEST(1 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
/* error condition - memory allocation failure */
CU_initialize_registry();
pReg = CU_get_registry();
test_cunit_deactivate_malloc();
pSuite = CU_add_suite("suite1", NULL, NULL);
TEST(CUE_NOMEMORY == CU_get_error());
TEST(NULL == pSuite);
TEST(0 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
test_cunit_activate_malloc();
/* normal creation & cleanup */
CU_initialize_registry();
pReg = CU_get_registry();
pSuite = CU_add_suite("suite1", NULL, NULL);
TEST(CUE_SUCCESS == CU_get_error());
TEST(NULL != pSuite);
TEST(1 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
TEST(CU_get_suite_by_name("suite1", pReg) == pSuite);
TEST(pReg->pSuite == pSuite);
TEST(!strcmp("suite1", pSuite->pName));
TEST(pSuite->pTest == NULL); /* no tests added yet */
TEST(pSuite->uiNumberOfTests == 0); /* no tests added yet */
TEST(pSuite->pInitializeFunc == NULL); /* no init function */
TEST(pSuite->pCleanupFunc == NULL); /* no cleanup function */
TEST(pSuite->pNext == NULL); /* no more suites added yet */
pSuite2 = CU_add_suite("suite2", sfunc1, NULL);
TEST(CUE_SUCCESS == CU_get_error());
TEST(NULL != pSuite2);
TEST(2 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
TEST(CU_get_suite_by_name("suite2", pReg) == pSuite2);
pSuite3 = CU_add_suite("suite3", NULL, sfunc1);
TEST(CUE_SUCCESS == CU_get_error());
TEST(NULL != pSuite3);
TEST(3 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
TEST(CU_get_suite_by_name("suite3", pReg) == pSuite3);
pSuite4 = CU_add_suite("suite4", sfunc1, sfunc1);
TEST(CUE_SUCCESS == CU_get_error());
TEST(NULL != pSuite4);
TEST(4 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
TEST(CU_get_suite_by_name("suite4", pReg) == pSuite4);
TEST(pReg->pSuite == pSuite);
TEST(!strcmp("suite1", pSuite->pName));
TEST(pSuite->pTest == NULL); /* no tests added yet */
TEST(pSuite->uiNumberOfTests == 0); /* no tests added yet */
TEST(pSuite->pInitializeFunc == NULL); /* no init function */
TEST(pSuite->pCleanupFunc == NULL); /* no cleanup function */
TEST(pSuite->pNext == pSuite2); /* now have another suite */
TEST(!strcmp("suite2", pSuite2->pName));
TEST(pSuite2->pTest == NULL); /* no tests added yet */
TEST(pSuite2->uiNumberOfTests == 0); /* no tests added yet */
TEST(pSuite2->pInitializeFunc == sfunc1); /* no init function */
TEST(pSuite2->pCleanupFunc == NULL); /* no cleanup function */
TEST(pSuite2->pNext == pSuite3); /* next suite in list */
TEST(!strcmp("suite3", pSuite3->pName));
TEST(pSuite3->pTest == NULL); /* no tests added yet */
TEST(pSuite3->uiNumberOfTests == 0); /* no tests added yet */
TEST(pSuite3->pInitializeFunc == NULL); /* no init function */
TEST(pSuite3->pCleanupFunc == sfunc1); /* no cleanup function */
TEST(pSuite3->pNext == pSuite4); /* next suite in list */
TEST(!strcmp("suite4", pSuite4->pName));
TEST(pSuite4->pTest == NULL); /* no tests added yet */
TEST(pSuite4->uiNumberOfTests == 0); /* no tests added yet */
TEST(pSuite4->pInitializeFunc == sfunc1); /* no init function */
TEST(pSuite4->pCleanupFunc == sfunc1); /* no cleanup function */
TEST(pSuite4->pNext == NULL); /* end of suite list */
TEST(0 != test_cunit_get_n_memevents(pSuite));
TEST(0 != test_cunit_get_n_memevents(pSuite2));
TEST(0 != test_cunit_get_n_memevents(pSuite3));
TEST(0 != test_cunit_get_n_memevents(pSuite4));
TEST(test_cunit_get_n_allocations(pSuite) != test_cunit_get_n_deallocations(pSuite));
TEST(test_cunit_get_n_allocations(pSuite2) != test_cunit_get_n_deallocations(pSuite2));
TEST(test_cunit_get_n_allocations(pSuite3) != test_cunit_get_n_deallocations(pSuite3));
TEST(test_cunit_get_n_allocations(pSuite4) != test_cunit_get_n_deallocations(pSuite4));
CU_cleanup_registry();
TEST(test_cunit_get_n_allocations(pSuite) == test_cunit_get_n_deallocations(pSuite));
TEST(test_cunit_get_n_allocations(pSuite2) == test_cunit_get_n_deallocations(pSuite2));
TEST(test_cunit_get_n_allocations(pSuite3) == test_cunit_get_n_deallocations(pSuite3));
TEST(test_cunit_get_n_allocations(pSuite4) == test_cunit_get_n_deallocations(pSuite4));
}
/*--------------------------------------------------*/
static void test_CU_add_test(void)
{
CU_pSuite pSuite1 = NULL;
CU_pSuite pSuite2 = NULL;
CU_pTest pTest1 = NULL;
CU_pTest pTest2 = NULL;
CU_pTest pTest3 = NULL;
CU_pTest pTest4 = NULL;
CU_pTestRegistry pReg = NULL;
CU_cleanup_registry();
/* error condition - registry not initialized */
pTest1 = CU_add_test(pSuite1, "test1", test1);
TEST(CUE_NOREGISTRY == CU_get_error());
TEST(NULL == pTest1);
CU_initialize_registry();
pReg = CU_get_registry();
/* error condition - no suite */
pTest1 = CU_add_test(pSuite1, "test1", test1);
TEST(CUE_NOSUITE == CU_get_error());
TEST(NULL == pTest1);
/* error condition - no name */
pSuite1 = CU_add_suite("suite1", NULL, NULL);
TEST(CUE_SUCCESS == CU_get_error());
pTest1 = CU_add_test(pSuite1, NULL, test1);
TEST(CUE_NO_TESTNAME == CU_get_error());
TEST(NULL == pTest1);
TEST(1 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
TEST(0 == pSuite1->uiNumberOfTests);
/* error condition - no test function */
pTest1 = CU_add_test(pSuite1, "test1", NULL);
TEST(CUE_NOTEST == CU_get_error());
TEST(NULL == pTest1);
TEST(1 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
TEST(0 == pSuite1->uiNumberOfTests);
/* error condition - duplicate name */
CU_initialize_registry();
pReg = CU_get_registry();
pSuite1 = CU_add_suite("suite1", NULL, NULL);
TEST(CUE_SUCCESS == CU_get_error());
pTest1 = CU_add_test(pSuite1, "test1", test1);
TEST(CUE_SUCCESS == CU_get_error());
TEST(NULL != pTest1);
TEST(1 == pReg->uiNumberOfSuites);
TEST(1 == pReg->uiNumberOfTests);
TEST(1 == pSuite1->uiNumberOfTests);
pTest2 = CU_add_test(pSuite1, "test1", test1);
TEST(CUE_DUP_TEST == CU_get_error());
TEST(NULL == pTest2);
TEST(1 == pReg->uiNumberOfSuites);
TEST(1 == pReg->uiNumberOfTests);
TEST(1 == pSuite1->uiNumberOfTests);
/* error condition - memory allocation failure */
CU_initialize_registry();
pReg = CU_get_registry();
pSuite1 = CU_add_suite("suite1", NULL, NULL);
TEST(CUE_SUCCESS == CU_get_error());
test_cunit_deactivate_malloc();
pTest1 = CU_add_test(pSuite1, "test1", test1);
test_cunit_activate_malloc();
TEST(CUE_NOMEMORY == CU_get_error());
TEST(NULL == pTest1);
TEST(1 == pReg->uiNumberOfSuites);
TEST(0 == pReg->uiNumberOfTests);
TEST(0 == pSuite1->uiNumberOfTests);
/* normal creation & cleanup */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -