Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_fkey_isSetNullAction.c225 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <string.h>4#include <stdlib.h>5 6/* Wrapper for the static function under test (provided in module) */7extern int test_isSetNullAction(Parse *pParse, FKey *pFKey);8 9static void init_parse(Parse *p, sqlite3 *db){10  memset(p, 0, sizeof(*p));11  p->db = db;12}13 14static void init_db(sqlite3 *db){15  memset(db, 0, sizeof(*db));16}17 18void setUp(void) {19  /* No global setup required */20}21 22void tearDown(void) {23  /* No global teardown required */24}25 26/* Return 1 when pTop->pTriggerPrg->pTrigger == pFKey->apTrigger[0]27** and aAction[0] == OE_SetNull.28*/29void test_isSetNullAction_matches_apTrigger0_setnull(void) {30  sqlite3 db; init_db(&db);31  Parse top; init_parse(&top, &db);32 33  Trigger tr0, tr1;34  memset(&tr0, 0, sizeof(tr0));35  memset(&tr1, 0, sizeof(tr1));36 37  TriggerPrg prg;38  memset(&prg, 0, sizeof(prg));39  prg.pTrigger = &tr0;40  top.pTriggerPrg = &prg;41 42  FKey fk;43  memset(&fk, 0, sizeof(fk));44  fk.apTrigger[0] = &tr0;45  fk.apTrigger[1] = &tr1;46  fk.aAction[0] = OE_SetNull;47  fk.aAction[1] = OE_Restrict;48 49  db.flags &= ~SQLITE_FkNoAction; /* ensure assert condition satisfied */50 51  int rc = test_isSetNullAction(&top, &fk);52  TEST_ASSERT_EQUAL_INT(1, rc);53}54 55/* Return 1 when pTop->pTriggerPrg->pTrigger == pFKey->apTrigger[1]56** and aAction[1] == OE_SetNull.57*/58void test_isSetNullAction_matches_apTrigger1_setnull(void) {59  sqlite3 db; init_db(&db);60  Parse top; init_parse(&top, &db);61 62  Trigger tr0, tr1;63  memset(&tr0, 0, sizeof(tr0));64  memset(&tr1, 0, sizeof(tr1));65 66  TriggerPrg prg;67  memset(&prg, 0, sizeof(prg));68  prg.pTrigger = &tr1;69  top.pTriggerPrg = &prg;70 71  FKey fk;72  memset(&fk, 0, sizeof(fk));73  fk.apTrigger[0] = &tr0;74  fk.apTrigger[1] = &tr1;75  fk.aAction[0] = OE_Restrict;76  fk.aAction[1] = OE_SetNull;77 78  db.flags &= ~SQLITE_FkNoAction; /* ensure assert condition satisfied */79 80  int rc = test_isSetNullAction(&top, &fk);81  TEST_ASSERT_EQUAL_INT(1, rc);82}83 84/* Return 0 when no TriggerPrg is present. */85void test_isSetNullAction_no_triggerprg_returns_0(void) {86  sqlite3 db; init_db(&db);87  Parse top; init_parse(&top, &db);88 89  top.pTriggerPrg = NULL;90 91  Trigger tr0, tr1;92  memset(&tr0, 0, sizeof(tr0));93  memset(&tr1, 0, sizeof(tr1));94 95  FKey fk;96  memset(&fk, 0, sizeof(fk));97  fk.apTrigger[0] = &tr0;98  fk.apTrigger[1] = &tr1;99  fk.aAction[0] = OE_SetNull; /* even if SetNull, no TriggerPrg -> 0 */100  fk.aAction[1] = OE_SetNull;101 102  int rc = test_isSetNullAction(&top, &fk);103  TEST_ASSERT_EQUAL_INT(0, rc);104}105 106/* Return 0 when trigger matches but action is not SetNull. */107void test_isSetNullAction_matching_trigger_non_setnull_action_returns_0(void) {108  sqlite3 db; init_db(&db);109  Parse top; init_parse(&top, &db);110 111  Trigger tr0, tr1;112  memset(&tr0, 0, sizeof(tr0));113  memset(&tr1, 0, sizeof(tr1));114 115  TriggerPrg prg;116  memset(&prg, 0, sizeof(prg));117  prg.pTrigger = &tr0;118  top.pTriggerPrg = &prg;119 120  FKey fk;121  memset(&fk, 0, sizeof(fk));122  fk.apTrigger[0] = &tr0;123  fk.apTrigger[1] = &tr1;124  fk.aAction[0] = OE_Cascade;  /* not SetNull */125  fk.aAction[1] = OE_Restrict;126 127  int rc = test_isSetNullAction(&top, &fk);128  TEST_ASSERT_EQUAL_INT(0, rc);129}130 131/* Return 0 when the current trigger does not match either FKey.apTrigger[]. */132void test_isSetNullAction_non_matching_trigger_returns_0(void) {133  sqlite3 db; init_db(&db);134  Parse top; init_parse(&top, &db);135 136  Trigger tr0, tr1, trOther;137  memset(&tr0, 0, sizeof(tr0));138  memset(&tr1, 0, sizeof(tr1));139  memset(&trOther, 0, sizeof(trOther));140 141  TriggerPrg prg;142  memset(&prg, 0, sizeof(prg));143  prg.pTrigger = &trOther; /* neither tr0 nor tr1 */144  top.pTriggerPrg = &prg;145 146  FKey fk;147  memset(&fk, 0, sizeof(fk));148  fk.apTrigger[0] = &tr0;149  fk.apTrigger[1] = &tr1;150  fk.aAction[0] = OE_SetNull;151  fk.aAction[1] = OE_SetNull;152 153  int rc = test_isSetNullAction(&top, &fk);154  TEST_ASSERT_EQUAL_INT(0, rc);155}156 157/* Ensure sqlite3ParseToplevel() behavior: child Parse points to a top-level Parse. */158void test_isSetNullAction_uses_toplevel_parse_context(void) {159  sqlite3 db; init_db(&db);160  Parse top; init_parse(&top, &db);161  Parse child; init_parse(&child, &db);162  child.pToplevel = &top;163 164  Trigger tr0, tr1;165  memset(&tr0, 0, sizeof(tr0));166  memset(&tr1, 0, sizeof(tr1));167 168  TriggerPrg prg;169  memset(&prg, 0, sizeof(prg));170  prg.pTrigger = &tr1;171  top.pTriggerPrg = &prg;172 173  FKey fk;174  memset(&fk, 0, sizeof(fk));175  fk.apTrigger[0] = &tr0;176  fk.apTrigger[1] = &tr1;177  fk.aAction[0] = OE_Restrict;178  fk.aAction[1] = OE_SetNull;179 180  db.flags &= ~SQLITE_FkNoAction; /* ensure assert condition satisfied */181 182  int rc = test_isSetNullAction(&child, &fk);183  TEST_ASSERT_EQUAL_INT(1, rc);184}185 186/* If SQLITE_FkNoAction is set but conditions do not match, still return 0187   (and no assertion should be triggered). */188void test_isSetNullAction_fknoaction_flag_non_matching_returns_0(void) {189  sqlite3 db; init_db(&db);190  db.flags |= SQLITE_FkNoAction; /* set the flag; path should not assert since not matching */191 192  Parse top; init_parse(&top, &db);193 194  Trigger tr0, tr1, trOther;195  memset(&tr0, 0, sizeof(tr0));196  memset(&tr1, 0, sizeof(tr1));197  memset(&trOther, 0, sizeof(trOther));198 199  TriggerPrg prg;200  memset(&prg, 0, sizeof(prg));201  prg.pTrigger = &trOther; /* not matching either */202  top.pTriggerPrg = &prg;203 204  FKey fk;205  memset(&fk, 0, sizeof(fk));206  fk.apTrigger[0] = &tr0;207  fk.apTrigger[1] = &tr1;208  fk.aAction[0] = OE_SetNull;209  fk.aAction[1] = OE_SetNull;210 211  int rc = test_isSetNullAction(&top, &fk);212  TEST_ASSERT_EQUAL_INT(0, rc);213}214 215int main(void) {216  UNITY_BEGIN();217  RUN_TEST(test_isSetNullAction_matches_apTrigger0_setnull);218  RUN_TEST(test_isSetNullAction_matches_apTrigger1_setnull);219  RUN_TEST(test_isSetNullAction_no_triggerprg_returns_0);220  RUN_TEST(test_isSetNullAction_matching_trigger_non_setnull_action_returns_0);221  RUN_TEST(test_isSetNullAction_non_matching_trigger_returns_0);222  RUN_TEST(test_isSetNullAction_uses_toplevel_parse_context);223  RUN_TEST(test_isSetNullAction_fknoaction_flag_non_matching_returns_0);224  return UNITY_END();225}