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");
+}