| #include "sqliteInt.h" |
| #include "unity.h" |
| #include <string.h> |
|
|
| |
| extern void test_renameParseCleanup(Parse *pParse); |
|
|
| static void init_parse_with_allocs(sqlite3 *db, Parse *pParse){ |
| memset(pParse, 0, sizeof(*pParse)); |
| pParse->db = db; |
|
|
| |
| pParse->pVdbe = sqlite3VdbeCreate(db); |
|
|
| |
| pParse->pNewTable = (Table*)sqlite3DbMallocZero(db, sizeof(Table)); |
|
|
| |
| Index *pIdx1 = (Index*)sqlite3DbMallocZero(db, sizeof(Index)); |
| Index *pIdx2 = (Index*)sqlite3DbMallocZero(db, sizeof(Index)); |
| if( pIdx1 ) pIdx1->pNext = pIdx2; |
| pParse->pNewIndex = pIdx1; |
|
|
| |
| pParse->pNewTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger)); |
|
|
| |
| pParse->zErrMsg = sqlite3DbStrDup(db, "unit-test-error"); |
|
|
| |
| RenameToken *t1 = (RenameToken*)sqlite3DbMallocZero(db, sizeof(RenameToken)); |
| RenameToken *t2 = (RenameToken*)sqlite3DbMallocZero(db, sizeof(RenameToken)); |
| if( t1 ) t1->pNext = t2; |
| pParse->pRename = t1; |
| } |
|
|
| void setUp(void) { |
| |
| } |
|
|
| void tearDown(void) { |
| |
| } |
|
|
| static void assert_parse_pointers_cleared(Parse *p){ |
| TEST_ASSERT_NULL(p->pVdbe); |
| TEST_ASSERT_NULL(p->pNewTable); |
| TEST_ASSERT_NULL(p->pNewIndex); |
| TEST_ASSERT_NULL(p->pNewTrigger); |
| TEST_ASSERT_NULL(p->zErrMsg); |
| TEST_ASSERT_NULL(p->pRename); |
| } |
|
|
| |
| void test_renameParseCleanup_clears_all_fields(void){ |
| sqlite3 *db = 0; |
| int rc = sqlite3_open(":memory:", &db); |
| TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc); |
| TEST_ASSERT_NOT_NULL(db); |
|
|
| Parse p; |
| init_parse_with_allocs(db, &p); |
|
|
| test_renameParseCleanup(&p); |
|
|
| |
| assert_parse_pointers_cleared(&p); |
|
|
| |
| rc = sqlite3_close(db); |
| TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc); |
| } |
|
|
| |
| void test_renameParseCleanup_handles_null_fields(void){ |
| sqlite3 *db = 0; |
| int rc = sqlite3_open(":memory:", &db); |
| TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc); |
| TEST_ASSERT_NOT_NULL(db); |
|
|
| Parse p; |
| memset(&p, 0, sizeof(p)); |
| p.db = db; |
|
|
| |
| test_renameParseCleanup(&p); |
|
|
| |
| assert_parse_pointers_cleared(&p); |
|
|
| rc = sqlite3_close(db); |
| TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc); |
| } |
|
|
| |
| void test_renameParseCleanup_multiple_indexes_and_tokens(void){ |
| sqlite3 *db = 0; |
| int rc = sqlite3_open(":memory:", &db); |
| TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc); |
| TEST_ASSERT_NOT_NULL(db); |
|
|
| Parse p; |
| memset(&p, 0, sizeof(p)); |
| p.db = db; |
|
|
| |
| p.pVdbe = sqlite3VdbeCreate(db); |
|
|
| |
| Index *i1 = (Index*)sqlite3DbMallocZero(db, sizeof(Index)); |
| Index *i2 = (Index*)sqlite3DbMallocZero(db, sizeof(Index)); |
| Index *i3 = (Index*)sqlite3DbMallocZero(db, sizeof(Index)); |
| if( i1 ) i1->pNext = i2; |
| if( i2 ) i2->pNext = i3; |
| p.pNewIndex = i1; |
|
|
| |
| RenameToken *t1 = (RenameToken*)sqlite3DbMallocZero(db, sizeof(RenameToken)); |
| RenameToken *t2 = (RenameToken*)sqlite3DbMallocZero(db, sizeof(RenameToken)); |
| RenameToken *t3 = (RenameToken*)sqlite3DbMallocZero(db, sizeof(RenameToken)); |
| if( t1 ) t1->pNext = t2; |
| if( t2 ) t2->pNext = t3; |
| p.pRename = t1; |
|
|
| |
| p.pNewTable = (Table*)sqlite3DbMallocZero(db, sizeof(Table)); |
| p.pNewTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger)); |
| p.zErrMsg = sqlite3DbStrDup(db, "err"); |
|
|
| test_renameParseCleanup(&p); |
|
|
| |
| assert_parse_pointers_cleared(&p); |
|
|
| rc = sqlite3_close(db); |
| TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc); |
| } |
|
|
| |
| void test_renameParseCleanup_idempotent_double_call(void){ |
| sqlite3 *db = 0; |
| int rc = sqlite3_open(":memory:", &db); |
| TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc); |
| TEST_ASSERT_NOT_NULL(db); |
|
|
| Parse p; |
| init_parse_with_allocs(db, &p); |
|
|
| |
| test_renameParseCleanup(&p); |
| assert_parse_pointers_cleared(&p); |
|
|
| |
| test_renameParseCleanup(&p); |
| assert_parse_pointers_cleared(&p); |
|
|
| rc = sqlite3_close(db); |
| TEST_ASSERT_EQUAL_INT(SQLITE_OK, rc); |
| } |
|
|
| int main(void){ |
| UNITY_BEGIN(); |
| RUN_TEST(test_renameParseCleanup_clears_all_fields); |
| RUN_TEST(test_renameParseCleanup_handles_null_fields); |
| RUN_TEST(test_renameParseCleanup_multiple_indexes_and_tokens); |
| RUN_TEST(test_renameParseCleanup_idempotent_double_call); |
| return UNITY_END(); |
| } |