null+****@clear*****
null+****@clear*****
2012年 2月 10日 (金) 16:05:01 JST
Kouhei Sutou 2012-02-10 16:05:01 +0900 (Fri, 10 Feb 2012) New Revision: ae285c55b4cb07be254cca6576a92a23e00ab9df Log: [table_create] added tests for invalid option value check. Modified files: lib/proc.c test/unit/core/test-command-table-create.c Modified: lib/proc.c (+9 -7) =================================================================== --- lib/proc.c 2012-02-10 15:56:51 +0900 (b8fb21e) +++ lib/proc.c 2012-02-10 16:05:01 +0900 (f5fa56e) @@ -863,11 +863,8 @@ proc_table_create(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_d value_type); if (table) { grn_obj *tokenizer_name; - grn_obj *normalizer_name; tokenizer_name = VAR(4); - normalizer_name = VAR(5); - if (GRN_TEXT_LEN(tokenizer_name)) { grn_obj *tokenizer; @@ -886,7 +883,12 @@ proc_table_create(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_d table = NULL; } } + } + + if (table) { + grn_obj *normalizer_name; + normalizer_name = VAR(5); if (GRN_TEXT_LEN(normalizer_name)) { grn_obj *normalizer; @@ -897,7 +899,7 @@ proc_table_create(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_d grn_obj_set_info(ctx, table, GRN_INFO_NORMALIZER, normalizer); } else { ERR(GRN_INVALID_ARGUMENT, - "[table][create] unknown normalizer is specified: ", + "[table][create] unknown normalizer is specified: " "<%.*s> (%.*s)", GRN_TEXT_LEN(table_name), GRN_TEXT_VALUE(table_name), GRN_TEXT_LEN(normalizer_name), GRN_TEXT_VALUE(normalizer_name)); @@ -905,10 +907,10 @@ proc_table_create(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_d table = NULL; } } + } - if (table) { - grn_obj_unlink(ctx, table); - } + if (table) { + grn_obj_unlink(ctx, table); } } else { ERR(GRN_INVALID_ARGUMENT, Modified: test/unit/core/test-command-table-create.c (+51 -18) =================================================================== --- test/unit/core/test-command-table-create.c 2012-02-10 15:56:51 +0900 (0b73c66) +++ test/unit/core/test-command-table-create.c 2012-02-10 16:05:01 +0900 (7e3b70b) @@ -31,12 +31,13 @@ void test_default_tokenizer(void); void test_normalizer(void); void test_invalid_name(void); +void test_default_tokenizer_nonexistent(void); static gchar *tmp_directory; static const gchar *database_path; static grn_ctx *context; -static grn_obj *database, *users; +static grn_obj *database, *table; void cut_startup(void) @@ -69,14 +70,14 @@ cut_setup(void) database_path = cut_build_path(tmp_directory, "database.groonga", NULL); database = grn_db_create(context, database_path, NULL); - users = NULL; + table = NULL; } void cut_teardown(void) { if (context) { - grn_obj_unlink(context, users); + grn_obj_unlink(context, table); grn_obj_close(context, database); grn_ctx_fin(context); g_free(context); @@ -86,42 +87,49 @@ cut_teardown(void) } static void -grn_test_assert_users_exist(void) +grn_test_assert_exist(const gchar *table_name) { - const gchar *users_name = "Users"; - users = grn_ctx_get(context, users_name, strlen(users_name)); + table = grn_ctx_get(context, table_name, strlen(table_name)); + grn_test_assert_not_null(context, table); +} + +static void +grn_test_assert_not_exist(const gchar *table_name) +{ + table = grn_ctx_get(context, table_name, strlen(table_name)); + grn_test_assert_null(context, table); } void test_hash_key(void) { assert_send_command("table_create Users TABLE_HASH_KEY ShortText"); - grn_test_assert_users_exist(); - grn_test_assert_equal_type(context, GRN_TABLE_HASH_KEY, users->header.type); + grn_test_assert_exist("Users"); + grn_test_assert_equal_type(context, GRN_TABLE_HASH_KEY, table->header.type); } void test_pat_key(void) { assert_send_command("table_create Users TABLE_PAT_KEY ShortText"); - grn_test_assert_users_exist(); - grn_test_assert_equal_type(context, GRN_TABLE_PAT_KEY, users->header.type); + grn_test_assert_exist("Users"); + grn_test_assert_equal_type(context, GRN_TABLE_PAT_KEY, table->header.type); } void test_dat_key(void) { assert_send_command("table_create Users TABLE_DAT_KEY ShortText"); - grn_test_assert_users_exist(); - grn_test_assert_equal_type(context, GRN_TABLE_DAT_KEY, users->header.type); + grn_test_assert_exist("Users"); + grn_test_assert_equal_type(context, GRN_TABLE_DAT_KEY, table->header.type); } void test_no_key(void) { assert_send_command("table_create Users TABLE_NO_KEY"); - grn_test_assert_users_exist(); - grn_test_assert_equal_type(context, GRN_TABLE_NO_KEY, users->header.type); + grn_test_assert_exist("Users"); + grn_test_assert_equal_type(context, GRN_TABLE_NO_KEY, table->header.type); } void @@ -130,8 +138,8 @@ test_default_tokenizer(void) grn_obj *tokenizer; assert_send_command("table_create Users TABLE_PAT_KEY ShortText " "--default_tokenizer TokenBigram"); - grn_test_assert_users_exist(); - tokenizer = grn_obj_get_info(context, users, GRN_INFO_DEFAULT_TOKENIZER, NULL); + grn_test_assert_exist("Users"); + tokenizer = grn_obj_get_info(context, table, GRN_INFO_DEFAULT_TOKENIZER, NULL); grn_test_assert_equal_id(context, GRN_DB_BIGRAM, grn_obj_id(context, tokenizer)); @@ -143,8 +151,8 @@ test_normalizer(void) grn_obj *normalizer; assert_send_command("table_create Users TABLE_PAT_KEY ShortText " "--normalizer NormalizerASCII"); - grn_test_assert_users_exist(); - normalizer = grn_obj_get_info(context, users, GRN_INFO_NORMALIZER, NULL); + grn_test_assert_exist("Users"); + normalizer = grn_obj_get_info(context, table, GRN_INFO_NORMALIZER, NULL); grn_test_assert_equal_id(context, GRN_DB_NORMALIZER_ASCII, grn_obj_id(context, normalizer)); @@ -160,3 +168,28 @@ test_invalid_name(void) "contains only 0-9, A-Z, a-z, #, - or _: <_Users>", "table_create _Users"); } + +void +test_default_tokenizer_nonexistent(void) +{ + grn_test_assert_send_command_error( + context, + GRN_INVALID_ARGUMENT, + "[table][create] unknown default tokenizer is specified: " + "<Users> (nonexistent)", + "table_create Users TABLE_PAT_KEY ShortText " + "--default_tokenizer nonexistent"); + grn_test_assert_not_exist("Users"); +} + +void +test_normalizer_nonexistent(void) +{ + grn_test_assert_send_command_error( + context, + GRN_INVALID_ARGUMENT, + "[table][create] unknown normalizer is specified: <Users> (nonexistent)", + "table_create Users TABLE_PAT_KEY ShortText " + "--normalizer nonexistent"); + grn_test_assert_not_exist("Users"); +}