void remove_text_multi_value_removes_when_one(void **state) { form_init_module(); 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 get_form_type_field_returns_value_when_present(void **state) { form_init_module(); 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_correct_type(void **state) { form_init_module(); 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 add_value_adds_when_none(void **state) { form_init_module(); 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 win_free(ProfWin* window) { buffer_free(window->buffer); delwin(window->win); switch (window->type) { case WIN_CONSOLE: if (window->wins.cons.subwin) { delwin(window->wins.cons.subwin); } break; case WIN_MUC: if (window->wins.muc.subwin) { delwin(window->wins.muc.subwin); } break; default: break; } if (window->type == WIN_CHAT) { free(window->wins.chat.resource); } free(window->from); if (window->type == WIN_MUC_CONFIG) { form_destroy(window->wins.conf.form); } free(window); }
void win_free(ProfWin* window) { if (window->layout->type == LAYOUT_SPLIT) { ProfLayoutSplit *layout = (ProfLayoutSplit*)window->layout; if (layout->subwin) { delwin(layout->subwin); } buffer_free(layout->base.buffer); delwin(layout->base.win); } else { buffer_free(window->layout->buffer); delwin(window->layout->win); } free(window->layout); switch (window->type) { case WIN_CHAT: { ProfChatWin *chatwin = (ProfChatWin*)window; free(chatwin->barejid); free(chatwin->resource_override); chat_state_free(chatwin->state); break; } case WIN_MUC: { ProfMucWin *mucwin = (ProfMucWin*)window; free(mucwin->roomjid); break; } case WIN_MUC_CONFIG: { ProfMucConfWin *mucconf = (ProfMucConfWin*)window; free(mucconf->roomjid); form_destroy(mucconf->form); break; } case WIN_PRIVATE: { ProfPrivateWin *privatewin = (ProfPrivateWin*)window; free(privatewin->fulljid); break; } case WIN_PLUGIN: { ProfPluginWin *pluginwin = (ProfPluginWin*)window; free(pluginwin->tag); free(pluginwin->plugin_name); break; } default: break; } free(window); }
void get_form_type_field_returns_null_no_fields(void **state) { form_init_module(); DataForm *form = _new_form(); char *result = form_get_form_type_field(form); assert_null(result); form_destroy(form); }
void get_field_type_returns_unknown_when_no_fields(void **state) { form_init_module(); 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 add_unique_value_adds_when_doesnt_exist(void **state) { form_init_module(); 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("*****@*****.**")); field1->values = g_slist_append(field1->values, strdup("*****@*****.**")); field1->values = g_slist_append(field1->values, strdup("*****@*****.**")); 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", "*****@*****.**"); 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, "*****@*****.**") == 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 get_form_type_field_returns_null_when_not_present(void **state) { form_init_module(); 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 remove_text_multi_value_does_nothing_when_doesnt_exist(void **state) { form_init_module(); 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 add_value_adds_when_exists(void **state) { form_init_module(); 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 add_unique_value_does_nothing_when_exists(void **state) { form_init_module(); 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("*****@*****.**")); 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", "*****@*****.**"); 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, "*****@*****.**"); form_destroy(form); }
void win_free(ProfWin* window) { if (window->layout->type == LAYOUT_SPLIT) { ProfLayoutSplit *layout = (ProfLayoutSplit*)window->layout; if (layout->subwin) { delwin(layout->subwin); } buffer_free(layout->base.buffer); delwin(layout->base.win); } else { buffer_free(window->layout->buffer); delwin(window->layout->win); } free(window->layout); if (window->type == WIN_CHAT) { ProfChatWin *chatwin = (ProfChatWin*)window; free(chatwin->barejid); free(chatwin->resource_override); chat_state_free(chatwin->state); } if (window->type == WIN_MUC) { ProfMucWin *mucwin = (ProfMucWin*)window; free(mucwin->roomjid); } if (window->type == WIN_MUC_CONFIG) { ProfMucConfWin *mucconf = (ProfMucConfWin*)window; free(mucconf->roomjid); form_destroy(mucconf->form); } if (window->type == WIN_PRIVATE) { ProfPrivateWin *privatewin = (ProfPrivateWin*)window; free(privatewin->fulljid); } free(window); }
Capabilities * caps_create(xmpp_stanza_t *query) { char *category = NULL; char *type = NULL; char *name = NULL; char *software = NULL; char *software_version = NULL; char *os = NULL; char *os_version = NULL; GSList *features = NULL; xmpp_stanza_t *softwareinfo = xmpp_stanza_get_child_by_ns(query, STANZA_NS_DATA); if (softwareinfo != NULL) { DataForm *form = form_create(softwareinfo); FormField *formField = NULL; char *form_type = form_get_form_type_field(form); if (g_strcmp0(form_type, STANZA_DATAFORM_SOFTWARE) == 0) { GSList *field = form->fields; while (field != NULL) { formField = field->data; if (formField->values != NULL) { if (strcmp(formField->var, "software") == 0) { software = strdup(formField->values->data); } else if (strcmp(formField->var, "software_version") == 0) { software_version = strdup(formField->values->data); } else if (strcmp(formField->var, "os") == 0) { os = strdup(formField->values->data); } else if (strcmp(formField->var, "os_version") == 0) { os_version = strdup(formField->values->data); } } field = g_slist_next(field); } } form_destroy(form); } xmpp_stanza_t *child = xmpp_stanza_get_children(query); GSList *identity_stanzas = NULL; while (child != NULL) { if (g_strcmp0(xmpp_stanza_get_name(child), "feature") == 0) { features = g_slist_append(features, strdup(xmpp_stanza_get_attribute(child, "var"))); } if (g_strcmp0(xmpp_stanza_get_name(child), "identity") == 0) { identity_stanzas = g_slist_append(identity_stanzas, child); } child = xmpp_stanza_get_next(child); } // find identity by locale const gchar* const *langs = g_get_language_names(); int num_langs = g_strv_length((gchar**)langs); xmpp_stanza_t *found = NULL; GSList *curr_identity = identity_stanzas; while (curr_identity) { xmpp_stanza_t *id_stanza = curr_identity->data; char *stanza_lang = xmpp_stanza_get_attribute(id_stanza, "xml:lang"); if (stanza_lang) { int i = 0; for (i = 0; i < num_langs; i++) { if (g_strcmp0(langs[i], stanza_lang) == 0) { found = id_stanza; break; } } } if (found) { break; } curr_identity = g_slist_next(curr_identity); } // not lang match, use default with no lang if (!found) { curr_identity = identity_stanzas; while (curr_identity) { xmpp_stanza_t *id_stanza = curr_identity->data; char *stanza_lang = xmpp_stanza_get_attribute(id_stanza, "xml:lang"); if (!stanza_lang) { found = id_stanza; break; } curr_identity = g_slist_next(curr_identity); } } // no matching lang, no identity without lang, use first if (!found) { if (identity_stanzas) { found = identity_stanzas->data; } } g_slist_free(identity_stanzas); if (found) { category = xmpp_stanza_get_attribute(found, "category"); type = xmpp_stanza_get_attribute(found, "type"); name = xmpp_stanza_get_attribute(found, "name"); } Capabilities *new_caps = malloc(sizeof(struct capabilities_t)); if (category != NULL) { new_caps->category = strdup(category); } else { new_caps->category = NULL; } if (type != NULL) { new_caps->type = strdup(type); } else { new_caps->type = NULL; } if (name != NULL) { new_caps->name = strdup(name); } else { new_caps->name = NULL; } if (software != NULL) { new_caps->software = software; } else { new_caps->software = NULL; } if (software_version != NULL) { new_caps->software_version = software_version; } else { new_caps->software_version = NULL; } if (os != NULL) { new_caps->os = os; } else { new_caps->os = NULL; } if (os_version != NULL) { new_caps->os_version = os_version; } else { new_caps->os_version = NULL; } if (features != NULL) { new_caps->features = features; } else { new_caps->features = NULL; } return new_caps; }