diff options
author | James Booth <boothj5@gmail.com> | 2015-05-28 18:50:55 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2015-05-28 18:50:55 +0100 |
commit | 6d6bb6458873196f904257cd00a6f2221262783d (patch) | |
tree | 2b751a3e8cc54dc487a95703898fc9a96e438dbf /unittests/test_form.c | |
parent | 0c99dc7ad60843aa7719a9c75aa701e3c86720da (diff) | |
download | profani-tty-6d6bb6458873196f904257cd00a6f2221262783d.tar.gz |
Moved tests -> unittests
Diffstat (limited to 'unittests/test_form.c')
-rw-r--r-- | unittests/test_form.c | 727 |
1 files changed, 727 insertions, 0 deletions
diff --git a/unittests/test_form.c b/unittests/test_form.c new file mode 100644 index 00000000..b3158a83 --- /dev/null +++ b/unittests/test_form.c @@ -0,0 +1,727 @@ +#include <stdarg.h> +#include <string.h> +#include <stddef.h> +#include <setjmp.h> +#include <cmocka.h> +#include <stdlib.h> + +#include "xmpp/form.h" + +xmpp_ctx_t* connection_get_ctx(void) +{ + return NULL; +} + +static DataForm* +_new_form(void) +{ + DataForm *form = malloc(sizeof(DataForm)); + form->type = NULL; + form->title = NULL; + form->instructions = NULL; + form->fields = NULL; + form->var_to_tag = g_hash_table_new_full(g_str_hash, g_str_equal, free, free); + form->tag_to_var = g_hash_table_new_full(g_str_hash, g_str_equal, free, free); + form->tag_ac = NULL; + + return form; +} + +static FormField* +_new_field(void) +{ + FormField *field = malloc(sizeof(FormField)); + field->label = NULL; + field->type = NULL; + field->description = NULL; + field->required = FALSE; + field->options = NULL; + field->var = NULL; + field->values = NULL; + field->value_ac = NULL; + + return field; + +} + +void get_form_type_field_returns_null_no_fields(void **state) +{ + DataForm *form = _new_form(); + + char *result = form_get_form_type_field(form); + + assert_null(result); + + form_destroy(form); +} + +void get_form_type_field_returns_null_when_not_present(void **state) +{ + DataForm *form = _new_form(); + FormField *field = _new_field(); + field->var = strdup("var1"); + field->values = g_slist_append(field->values, strdup("value1")); + form->fields = g_slist_append(form->fields, field); + + char *result = form_get_form_type_field(form); + + assert_null(result); + + form_destroy(form); +} + +void get_form_type_field_returns_value_when_present(void **state) +{ + DataForm *form = _new_form(); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->values = g_slist_append(field1->values, strdup("value1")); + form->fields = g_slist_append(form->fields, field1); + + FormField *field2 = _new_field(); + field2->var = strdup("FORM_TYPE"); + field2->values = g_slist_append(field2->values, strdup("value2")); + form->fields = g_slist_append(form->fields, field2); + + FormField *field3 = _new_field(); + field3->var = strdup("var3"); + field3->values = g_slist_append(field3->values, strdup("value3")); + form->fields = g_slist_append(form->fields, field3); + + char *result = form_get_form_type_field(form); + + assert_string_equal(result, "value2"); + + form_destroy(form); +} + +void get_field_type_returns_unknown_when_no_fields(void **state) +{ + DataForm *form = _new_form(); + + form_field_type_t result = form_get_field_type(form, "tag"); + + assert_int_equal(result, FIELD_UNKNOWN); + + form_destroy(form); +} + +void get_field_type_returns_correct_type(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_TEXT_SINGLE; + field1->values = g_slist_append(field1->values, strdup("value1")); + form->fields = g_slist_append(form->fields, field1); + + FormField *field2 = _new_field(); + field2->var = strdup("var2"); + field2->type_t = FIELD_TEXT_MULTI; + field2->values = g_slist_append(field2->values, strdup("value2")); + form->fields = g_slist_append(form->fields, field2); + + form_field_type_t result = form_get_field_type(form, "tag2"); + + assert_int_equal(result, FIELD_TEXT_MULTI); + + form_destroy(form); +} + +void set_value_adds_when_none(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_TEXT_SINGLE; + field1->values = g_slist_append(field1->values, strdup("value1")); + form->fields = g_slist_append(form->fields, field1); + + FormField *field2 = _new_field(); + field2->var = strdup("var2"); + field2->type_t = FIELD_LIST_SINGLE; + form->fields = g_slist_append(form->fields, field2); + + form_set_value(form, "tag2", "a new value"); + + int length = 0; + char *value = NULL; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var2") == 0) { + length = g_slist_length(field->values); + value = field->values->data; + break; + } + curr_field = g_slist_next(curr_field); + } + + assert_int_equal(length, 1); + assert_string_equal(value, "a new value"); + + form_destroy(form); +} + +void set_value_updates_when_one(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_TEXT_SINGLE; + form->fields = g_slist_append(form->fields, field1); + + FormField *field2 = _new_field(); + field2->var = strdup("var2"); + field2->type_t = FIELD_LIST_SINGLE; + field2->values = g_slist_append(field2->values, strdup("value2")); + form->fields = g_slist_append(form->fields, field2); + + form_set_value(form, "tag2", "a new value"); + + int length = 0; + char *value = NULL; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var2") == 0) { + length = g_slist_length(field->values); + value = field->values->data; + break; + } + curr_field = g_slist_next(curr_field); + } + + assert_int_equal(length, 1); + assert_string_equal(value, "a new value"); + + form_destroy(form); +} + +void add_unique_value_adds_when_none(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_JID_MULTI; + form->fields = g_slist_append(form->fields, field1); + + FormField *field2 = _new_field(); + field2->var = strdup("var2"); + field2->type_t = FIELD_LIST_SINGLE; + field2->values = g_slist_append(field2->values, strdup("value2")); + form->fields = g_slist_append(form->fields, field2); + + gboolean ret = form_add_unique_value(form, "tag1", "me@server.com"); + + int length = 0; + char *value = NULL; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + value = field->values->data; + break; + } + curr_field = g_slist_next(curr_field); + } + + assert_true(ret); + assert_int_equal(length, 1); + assert_string_equal(value, "me@server.com"); + + form_destroy(form); +} + +void add_unique_value_does_nothing_when_exists(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_JID_MULTI; + field1->values = g_slist_append(field1->values, strdup("me@server.com")); + form->fields = g_slist_append(form->fields, field1); + + FormField *field2 = _new_field(); + field2->var = strdup("var2"); + field2->type_t = FIELD_LIST_SINGLE; + field2->values = g_slist_append(field2->values, strdup("value2")); + form->fields = g_slist_append(form->fields, field2); + + gboolean ret = form_add_unique_value(form, "tag1", "me@server.com"); + + int length = 0; + char *value = NULL; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + value = field->values->data; + break; + } + curr_field = g_slist_next(curr_field); + } + + assert_false(ret); + assert_int_equal(length, 1); + assert_string_equal(value, "me@server.com"); + + form_destroy(form); +} + +void add_unique_value_adds_when_doesnt_exist(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + g_hash_table_insert(form->tag_to_var, strdup("tag2"), strdup("var2")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_JID_MULTI; + field1->values = g_slist_append(field1->values, strdup("dolan@server.com")); + field1->values = g_slist_append(field1->values, strdup("kieran@server.com")); + field1->values = g_slist_append(field1->values, strdup("chi@server.com")); + form->fields = g_slist_append(form->fields, field1); + + FormField *field2 = _new_field(); + field2->var = strdup("var2"); + field2->type_t = FIELD_LIST_SINGLE; + field2->values = g_slist_append(field2->values, strdup("value2")); + form->fields = g_slist_append(form->fields, field2); + + gboolean ret = form_add_unique_value(form, "tag1", "me@server.com"); + + int length = 0; + int count = 0; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + GSList *curr_value = field->values; + while (curr_value != NULL) { + if (g_strcmp0(curr_value->data, "me@server.com") == 0) { + count++; + } + curr_value = g_slist_next(curr_value); + } + break; + } + curr_field = g_slist_next(curr_field); + } + + assert_true(ret); + assert_int_equal(length, 4); + assert_int_equal(count, 1); + + form_destroy(form); +} + +void add_value_adds_when_none(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + form->fields = g_slist_append(form->fields, field1); + + form_add_value(form, "tag1", "somevalue"); + + int length = 0; + char *value = NULL; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + value = field->values->data; + break; + } + curr_field = g_slist_next(curr_field); + } + + assert_int_equal(length, 1); + assert_string_equal(value, "somevalue"); + + form_destroy(form); +} + +void add_value_adds_when_some(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + field1->values = g_slist_append(field1->values, strdup("some text")); + field1->values = g_slist_append(field1->values, strdup("some more text")); + field1->values = g_slist_append(field1->values, strdup("yet some more text")); + form->fields = g_slist_append(form->fields, field1); + + form_add_value(form, "tag1", "new value"); + + int num_values = 0; + int new_value_count = 0; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + GSList *curr_value = field->values; + while (curr_value != NULL) { + num_values++; + if (g_strcmp0(curr_value->data, "new value") == 0) { + new_value_count++; + } + curr_value = g_slist_next(curr_value); + } + break; + } + curr_field = g_slist_next(curr_field); + } + + assert_int_equal(num_values, 4); + assert_int_equal(new_value_count, 1); + + form_destroy(form); +} + +void add_value_adds_when_exists(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + field1->values = g_slist_append(field1->values, strdup("some text")); + field1->values = g_slist_append(field1->values, strdup("some more text")); + field1->values = g_slist_append(field1->values, strdup("yet some more text")); + field1->values = g_slist_append(field1->values, strdup("new value")); + form->fields = g_slist_append(form->fields, field1); + + form_add_value(form, "tag1", "new value"); + + int num_values = 0; + int new_value_count = 0; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + GSList *curr_value = field->values; + while (curr_value != NULL) { + num_values++; + if (g_strcmp0(curr_value->data, "new value") == 0) { + new_value_count++; + } + curr_value = g_slist_next(curr_value); + } + break; + } + curr_field = g_slist_next(curr_field); + } + + assert_int_equal(num_values, 5); + assert_int_equal(new_value_count, 2); + + form_destroy(form); +} + +void remove_value_does_nothing_when_none(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + form->fields = g_slist_append(form->fields, field1); + + gboolean res = form_remove_value(form, "tag1", "some value"); + + int length = -1; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + } + curr_field = g_slist_next(curr_field); + } + + assert_false(res); + assert_int_equal(length, 0); + + form_destroy(form); +} + +void remove_value_does_nothing_when_doesnt_exist(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + field1->values = g_slist_append(field1->values, strdup("value1")); + field1->values = g_slist_append(field1->values, strdup("value2")); + field1->values = g_slist_append(field1->values, strdup("value3")); + field1->values = g_slist_append(field1->values, strdup("value4")); + form->fields = g_slist_append(form->fields, field1); + + gboolean res = form_remove_value(form, "tag1", "value5"); + + int length = -1; + int value_count = 0; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + GSList *curr_value = field->values; + while (curr_value != NULL) { + if (g_strcmp0(curr_value->data, "value5") == 0) { + value_count++; + } + curr_value = g_slist_next(curr_value); + } + } + curr_field = g_slist_next(curr_field); + } + + assert_false(res); + assert_int_equal(length, 4); + assert_int_equal(value_count, 0); + + form_destroy(form); +} + +void remove_value_removes_when_one(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + field1->values = g_slist_append(field1->values, strdup("value4")); + form->fields = g_slist_append(form->fields, field1); + + gboolean res = form_remove_value(form, "tag1", "value4"); + + int length = -1; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + } + curr_field = g_slist_next(curr_field); + } + + assert_true(res); + assert_int_equal(length, 0); + + form_destroy(form); +} + +void remove_value_removes_when_many(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + field1->values = g_slist_append(field1->values, strdup("value1")); + field1->values = g_slist_append(field1->values, strdup("value2")); + field1->values = g_slist_append(field1->values, strdup("value3")); + field1->values = g_slist_append(field1->values, strdup("value4")); + form->fields = g_slist_append(form->fields, field1); + + gboolean res = form_remove_value(form, "tag1", "value2"); + + int length = -1; + int value_count = 0; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + GSList *curr_value = field->values; + while (curr_value != NULL) { + if (g_strcmp0(curr_value->data, "value2") == 0) { + value_count++; + } + curr_value = g_slist_next(curr_value); + } + } + curr_field = g_slist_next(curr_field); + } + + assert_true(res); + assert_int_equal(length, 3); + assert_int_equal(value_count, 0); + + form_destroy(form); +} + +void remove_text_multi_value_does_nothing_when_none(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + form->fields = g_slist_append(form->fields, field1); + + gboolean res = form_remove_text_multi_value(form, "tag1", 3); + + int length = -1; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + } + curr_field = g_slist_next(curr_field); + } + + assert_false(res); + assert_int_equal(length, 0); + + form_destroy(form); +} + +void remove_text_multi_value_does_nothing_when_doesnt_exist(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + field1->values = g_slist_append(field1->values, strdup("value1")); + field1->values = g_slist_append(field1->values, strdup("value2")); + field1->values = g_slist_append(field1->values, strdup("value3")); + field1->values = g_slist_append(field1->values, strdup("value4")); + form->fields = g_slist_append(form->fields, field1); + + gboolean res = form_remove_text_multi_value(form, "tag1", 5); + + int length = -1; + int value_count = 0; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + GSList *curr_value = field->values; + while (curr_value != NULL) { + if (g_strcmp0(curr_value->data, "value5") == 0) { + value_count++; + } + curr_value = g_slist_next(curr_value); + } + } + curr_field = g_slist_next(curr_field); + } + + assert_false(res); + assert_int_equal(length, 4); + assert_int_equal(value_count, 0); + + form_destroy(form); +} + +void remove_text_multi_value_removes_when_one(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + field1->values = g_slist_append(field1->values, strdup("value4")); + form->fields = g_slist_append(form->fields, field1); + + gboolean res = form_remove_text_multi_value(form, "tag1", 1); + + int length = -1; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + } + curr_field = g_slist_next(curr_field); + } + + assert_true(res); + assert_int_equal(length, 0); + + form_destroy(form); +} + +void remove_text_multi_value_removes_when_many(void **state) +{ + DataForm *form = _new_form(); + g_hash_table_insert(form->tag_to_var, strdup("tag1"), strdup("var1")); + + FormField *field1 = _new_field(); + field1->var = strdup("var1"); + field1->type_t = FIELD_LIST_MULTI; + field1->values = g_slist_append(field1->values, strdup("value1")); + field1->values = g_slist_append(field1->values, strdup("value2")); + field1->values = g_slist_append(field1->values, strdup("value3")); + field1->values = g_slist_append(field1->values, strdup("value4")); + form->fields = g_slist_append(form->fields, field1); + + gboolean res = form_remove_text_multi_value(form, "tag1", 2); + + int length = -1; + int value_count = 0; + GSList *curr_field = form->fields; + while (curr_field != NULL) { + FormField *field = curr_field->data; + if (g_strcmp0(field->var, "var1") == 0) { + length = g_slist_length(field->values); + GSList *curr_value = field->values; + while (curr_value != NULL) { + if (g_strcmp0(curr_value->data, "value2") == 0) { + value_count++; + } + curr_value = g_slist_next(curr_value); + } + } + curr_field = g_slist_next(curr_field); + } + + assert_true(res); + assert_int_equal(length, 3); + assert_int_equal(value_count, 0); + + form_destroy(form); +} + |