Team Ai
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
tests_complete_sqlite3_complete.c185 linesDownload Raw Back to tests
1#include "sqliteInt.h"2#include "unity.h"3#include <string.h>4 5/* Unity fixtures */6void setUp(void) {7  /* Setup code here, or leave empty */8}9void tearDown(void) {10  /* Cleanup code here, or leave empty */11}12 13/* Helper to assert sqlite3_complete() result with message of the SQL string */14static void assert_complete_is(const char *sql, int expected){15  int rc = sqlite3_complete(sql);16  TEST_ASSERT_EQUAL_INT_MESSAGE(expected, rc, sql);17}18 19/* Basic termination tests */20void test_sqlite3_complete_simple_semicolon(void){21  assert_complete_is("SELECT 1;", 1);22}23void test_sqlite3_complete_missing_semicolon(void){24  assert_complete_is("SELECT 1", 0);25}26void test_sqlite3_complete_multiple_statements_final_semicolon(void){27  assert_complete_is("SELECT 1; SELECT 2;", 1);28}29void test_sqlite3_complete_multiple_statements_missing_final_semicolon(void){30  assert_complete_is("SELECT 1; SELECT 2", 0);31}32void test_sqlite3_complete_semicolon_then_whitespace(void){33  assert_complete_is(" ; \n\t", 1);34}35 36/* Empty and whitespace-only inputs */37void test_sqlite3_complete_empty_string_returns_false(void){38  assert_complete_is("", 0);39}40void test_sqlite3_complete_whitespace_only_returns_false(void){41  assert_complete_is("   \n\t", 0);42}43 44/* Comment handling */45void test_sqlite3_complete_comment_only_cstyle_returns_false(void){46  assert_complete_is("/* just a comment */", 0);47}48void test_sqlite3_complete_comment_only_sqlstyle_returns_false(void){49  assert_complete_is("-- only comment", 0);50}51void test_sqlite3_complete_trailing_sql_comment_without_newline_after_semicolon(void){52  assert_complete_is("SELECT 1;-- trailing comment", 1);53}54void test_sqlite3_complete_trailing_sql_comment_with_newline_after_semicolon(void){55  assert_complete_is("SELECT 1;-- trailing comment\n", 1);56}57void test_sqlite3_complete_semicolon_inside_c_comment_ignored(void){58  assert_complete_is("/* ; inside comment */", 0);59}60void test_sqlite3_complete_statement_then_c_comment(void){61  assert_complete_is("SELECT 1; /* trailing comment with ; inside ; */", 1);62}63void test_sqlite3_complete_statement_then_sql_comment_ending_line(void){64  assert_complete_is("SELECT 1; -- comment to eol", 1);65}66void test_sqlite3_complete_unterminated_c_comment_returns_false(void){67  assert_complete_is("SELECT 1; /* unterminated", 0);68}69 70/* Quoted identifiers/strings and bracketed names */71void test_sqlite3_complete_semicolon_inside_single_quotes_ignored(void){72  assert_complete_is("SELECT ';';", 1);73}74void test_sqlite3_complete_unterminated_single_quote_returns_false(void){75  assert_complete_is("SELECT 'abc", 0);76}77void test_sqlite3_complete_bracket_identifier_with_semicolon_inside(void){78  assert_complete_is("SELECT [a;b];", 1);79}80void test_sqlite3_complete_unterminated_bracket_identifier_returns_false(void){81  assert_complete_is("SELECT [abc", 0);82}83void test_sqlite3_complete_backtick_identifier_with_semicolon_inside(void){84  assert_complete_is("SELECT `a;b`;", 1);85}86void test_sqlite3_complete_double_quoted_identifier_with_semicolon_inside(void){87  assert_complete_is("SELECT \"a;b\";", 1);88}89 90/* Keyword recognition and non-trigger CREATE handling */91void test_sqlite3_complete_explain_select(void){92  assert_complete_is("explain select 1;", 1);93}94void test_sqlite3_complete_create_table_is_not_trigger_special_case(void){95  assert_complete_is("CREATE TABLE t(x);", 1);96}97void test_sqlite3_complete_create_temp_table_is_not_trigger_special_case(void){98  assert_complete_is("CREATE TEMP TABLE t(x);", 1);99}100 101/* Trigger handling (only when triggers are enabled) */102#ifndef SQLITE_OMIT_TRIGGER103void test_sqlite3_complete_create_trigger_valid_sequence_end_semicolon(void){104  const char *sql = "CREATE TRIGGER t AFTER INSERT ON x BEGIN SELECT 1; END;";105  assert_complete_is(sql, 1);106}107void test_sqlite3_complete_create_trigger_missing_final_semicolon_returns_false(void){108  const char *sql = "CREATE TRIGGER t AFTER INSERT ON x BEGIN SELECT 1; END";109  assert_complete_is(sql, 0);110}111void test_sqlite3_complete_create_trigger_missing_semicolon_before_end_returns_false(void){112  const char *sql = "CREATE TRIGGER t AFTER INSERT ON x BEGIN SELECT 1 END;";113  assert_complete_is(sql, 0);114}115void test_sqlite3_complete_create_temp_trigger_valid(void){116  const char *sql =117    "CREATE TEMP TRIGGER t BEFORE UPDATE ON x BEGIN SELECT 1; END;";118  assert_complete_is(sql, 1);119}120void test_sqlite3_complete_create_temporary_trigger_valid(void){121  const char *sql =122    "CREATE TEMPORARY TRIGGER t AFTER UPDATE ON x BEGIN SELECT 1; END;";123  assert_complete_is(sql, 1);124}125void test_sqlite3_complete_explain_create_trigger_valid(void){126  const char *sql =127    "EXPLAIN CREATE TRIGGER t AFTER INSERT ON x BEGIN SELECT 1; END;";128  assert_complete_is(sql, 1);129}130#endif /* SQLITE_OMIT_TRIGGER */131 132/* API armor NULL check (only when enabled) */133#ifdef SQLITE_ENABLE_API_ARMOR134void test_sqlite3_complete_null_pointer_returns_false_under_api_armor(void){135  TEST_ASSERT_EQUAL_INT(0, sqlite3_complete(NULL));136}137#endif138 139int main(void){140  UNITY_BEGIN();141 142  RUN_TEST(test_sqlite3_complete_simple_semicolon);143  RUN_TEST(test_sqlite3_complete_missing_semicolon);144  RUN_TEST(test_sqlite3_complete_multiple_statements_final_semicolon);145  RUN_TEST(test_sqlite3_complete_multiple_statements_missing_final_semicolon);146  RUN_TEST(test_sqlite3_complete_semicolon_then_whitespace);147 148  RUN_TEST(test_sqlite3_complete_empty_string_returns_false);149  RUN_TEST(test_sqlite3_complete_whitespace_only_returns_false);150 151  RUN_TEST(test_sqlite3_complete_comment_only_cstyle_returns_false);152  RUN_TEST(test_sqlite3_complete_comment_only_sqlstyle_returns_false);153  RUN_TEST(test_sqlite3_complete_trailing_sql_comment_without_newline_after_semicolon);154  RUN_TEST(test_sqlite3_complete_trailing_sql_comment_with_newline_after_semicolon);155  RUN_TEST(test_sqlite3_complete_semicolon_inside_c_comment_ignored);156  RUN_TEST(test_sqlite3_complete_statement_then_c_comment);157  RUN_TEST(test_sqlite3_complete_statement_then_sql_comment_ending_line);158  RUN_TEST(test_sqlite3_complete_unterminated_c_comment_returns_false);159 160  RUN_TEST(test_sqlite3_complete_semicolon_inside_single_quotes_ignored);161  RUN_TEST(test_sqlite3_complete_unterminated_single_quote_returns_false);162  RUN_TEST(test_sqlite3_complete_bracket_identifier_with_semicolon_inside);163  RUN_TEST(test_sqlite3_complete_unterminated_bracket_identifier_returns_false);164  RUN_TEST(test_sqlite3_complete_backtick_identifier_with_semicolon_inside);165  RUN_TEST(test_sqlite3_complete_double_quoted_identifier_with_semicolon_inside);166 167  RUN_TEST(test_sqlite3_complete_explain_select);168  RUN_TEST(test_sqlite3_complete_create_table_is_not_trigger_special_case);169  RUN_TEST(test_sqlite3_complete_create_temp_table_is_not_trigger_special_case);170 171#ifndef SQLITE_OMIT_TRIGGER172  RUN_TEST(test_sqlite3_complete_create_trigger_valid_sequence_end_semicolon);173  RUN_TEST(test_sqlite3_complete_create_trigger_missing_final_semicolon_returns_false);174  RUN_TEST(test_sqlite3_complete_create_trigger_missing_semicolon_before_end_returns_false);175  RUN_TEST(test_sqlite3_complete_create_temp_trigger_valid);176  RUN_TEST(test_sqlite3_complete_create_temporary_trigger_valid);177  RUN_TEST(test_sqlite3_complete_explain_create_trigger_valid);178#endif179 180#ifdef SQLITE_ENABLE_API_ARMOR181  RUN_TEST(test_sqlite3_complete_null_pointer_returns_false_under_api_armor);182#endif183 184  return UNITY_END();185}