#include "sqliteInt.h" #include "unity.h" #include #include /* Wrapper for the static function provided by the build system */ void test_renameSetENames(ExprList *pEList, int val); /* Unity setup/teardown */ void setUp(void) { /* Setup code here, or leave empty */ } void tearDown(void) { /* Cleanup code here, or leave empty */ } /* Helpers to construct and destroy minimal ExprList instances */ static ExprList *makeExprList(int nExpr, int initEName){ ExprList *p = (ExprList*)sqlite3_malloc(sizeof(*p)); TEST_ASSERT_NOT_NULL(p); memset(p, 0, sizeof(*p)); p->nExpr = nExpr; p->nAlloc = nExpr; if( nExpr>0 ){ p->a = (typeof(p->a))sqlite3_malloc(sizeof(p->a[0]) * (size_t)nExpr); TEST_ASSERT_NOT_NULL(p->a); memset(p->a, 0, sizeof(p->a[0]) * (size_t)nExpr); for(int i=0; ia[i].fg.eEName = (u8)initEName; } }else{ p->a = 0; } return p; } static void freeExprList(ExprList *p){ if( p ){ if( p->a ) sqlite3_free(p->a); sqlite3_free(p); } } /* Tests */ void test_renameSetENames_null_list(void){ /* Should be a no-op and not crash */ test_renameSetENames(NULL, ENAME_NAME); } void test_renameSetENames_zero_length_list(void){ ExprList *p = makeExprList(0, ENAME_NAME); test_renameSetENames(p, ENAME_TAB); TEST_ASSERT_EQUAL_INT(0, p->nExpr); TEST_ASSERT_EQUAL_INT(0, p->nAlloc); /* nAlloc set in helper equals 0 */ TEST_ASSERT_NULL(p->a); freeExprList(p); } void test_renameSetENames_set_to_NAME_from_mixed_values(void){ /* Initial values can be anything when setting to ENAME_NAME */ ExprList *p = makeExprList(6, ENAME_TAB); /* Mix in some different initial values */ if( p->nExpr >= 2 ){ p->a[1].fg.eEName = ENAME_SPAN; } if( p->nExpr >= 4 ){ p->a[3].fg.eEName = ENAME_NAME; } if( p->nExpr >= 6 ){ p->a[5].fg.eEName = ENAME_SPAN; } test_renameSetENames(p, ENAME_NAME); for(int i=0; inExpr; i++){ TEST_ASSERT_EQUAL_INT(ENAME_NAME & 0x3, p->a[i].fg.eEName); } freeExprList(p); } void test_renameSetENames_set_to_TAB_from_NAME(void){ /* Must initialize all entries to ENAME_NAME to satisfy the internal assert */ ExprList *p = makeExprList(5, ENAME_NAME); test_renameSetENames(p, ENAME_TAB); for(int i=0; inExpr; i++){ TEST_ASSERT_EQUAL_INT(ENAME_TAB & 0x3, p->a[i].fg.eEName); } freeExprList(p); } void test_renameSetENames_set_to_SPAN_from_NAME(void){ ExprList *p = makeExprList(7, ENAME_NAME); test_renameSetENames(p, ENAME_SPAN); for(int i=0; inExpr; i++){ TEST_ASSERT_EQUAL_INT(ENAME_SPAN & 0x3, p->a[i].fg.eEName); } freeExprList(p); } int main(void){ UNITY_BEGIN(); RUN_TEST(test_renameSetENames_null_list); RUN_TEST(test_renameSetENames_zero_length_list); RUN_TEST(test_renameSetENames_set_to_NAME_from_mixed_values); RUN_TEST(test_renameSetENames_set_to_TAB_from_NAME); RUN_TEST(test_renameSetENames_set_to_SPAN_from_NAME); return UNITY_END(); }