about summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_autocomplete.h10
-rw-r--r--tests/test_command.c21
-rw-r--r--tests/test_command.h1
-rw-r--r--tests/test_common.h32
-rw-r--r--tests/ui/mock_ui.c302
-rw-r--r--tests/xmpp/mock_xmpp.c150
6 files changed, 516 insertions, 0 deletions
diff --git a/tests/test_autocomplete.h b/tests/test_autocomplete.h
new file mode 100644
index 00000000..4ad327c0
--- /dev/null
+++ b/tests/test_autocomplete.h
@@ -0,0 +1,10 @@
+void clear_empty(void **state);
+void reset_after_create(void **state);
+void find_after_create(void **state);
+void get_after_create_returns_null(void **state);
+void add_one_and_complete(void **state);
+void add_two_and_complete_returns_first(void **state);
+void add_two_and_complete_returns_second(void **state);
+void add_two_adds_two(void **state);
+void add_two_same_adds_one(void **state);
+void add_two_same_updates(void **state);
diff --git a/tests/test_command.c b/tests/test_command.c
new file mode 100644
index 00000000..13738032
--- /dev/null
+++ b/tests/test_command.c
@@ -0,0 +1,21 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+#include <stdlib.h>
+
+#include "xmpp/xmpp.h"
+#include "ui/ui.h"
+#include "command/command.h"
+
+void cmd_rooms_shows_message_when_not_connected(void **state)
+{
+    will_return(jabber_get_connection_status, JABBER_DISCONNECTED);
+    expect_string(cons_show, msg, "You are not currently connected.");
+    CommandHelp *help = malloc(sizeof(CommandHelp));
+
+    assert_true(_cmd_rooms(NULL, *help));
+
+    free(help);
+}
+
diff --git a/tests/test_command.h b/tests/test_command.h
new file mode 100644
index 00000000..589b589c
--- /dev/null
+++ b/tests/test_command.h
@@ -0,0 +1 @@
+void cmd_rooms_shows_message_when_not_connected(void **state);
diff --git a/tests/test_common.h b/tests/test_common.h
new file mode 100644
index 00000000..903570e3
--- /dev/null
+++ b/tests/test_common.h
@@ -0,0 +1,32 @@
+void replace_one_substr(void **state);
+void replace_one_substr_beginning(void **state);
+void replace_one_substr_end(void **state);
+void replace_two_substr(void **state);
+void replace_char(void **state);
+void replace_when_none(void **state);
+void replace_when_match(void **state);
+void replace_when_string_empty(void **state);
+void replace_when_string_null(void **state);
+void replace_when_sub_empty(void **state);
+void replace_when_sub_null(void **state);
+void replace_when_new_empty(void **state);
+void replace_when_new_null(void **state);
+void compare_win_nums_less(void **state);
+void compare_win_nums_equal(void **state);
+void compare_win_nums_greater(void **state);
+void compare_0s_equal(void **state);
+void compare_0_greater_than_1(void **state);
+void compare_1_less_than_0(void **state);
+void compare_0_less_than_11(void **state);
+void compare_11_greater_than_0(void **state);
+void compare_0_greater_than_9(void **state);
+void compare_9_less_than_0(void **state);
+void next_available_when_only_console(void **state);
+void next_available_3_at_end(void **state);
+void next_available_9_at_end(void **state);
+void next_available_0_at_end(void **state);
+void next_available_2_in_first_gap(void **state);
+void next_available_9_in_first_gap(void **state);
+void next_available_0_in_first_gap(void **state);
+void next_available_11_in_first_gap(void **state);
+void next_available_24_first_big_gap(void **state);
diff --git a/tests/ui/mock_ui.c b/tests/ui/mock_ui.c
new file mode 100644
index 00000000..bf9f2499
--- /dev/null
+++ b/tests/ui/mock_ui.c
@@ -0,0 +1,302 @@
+/*
+ * ui.h
+ *
+ * Copyright (C) 2012, 2013 James Booth <boothj5@gmail.com>
+ *
+ * This file is part of Profanity.
+ *
+ * Profanity is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Profanity is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY {} without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Profanity.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <glib.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "ui/ui.h"
+
+// ui startup and control
+void ui_init(void) {}
+void ui_load_colours(void) {}
+void ui_refresh(void) {}
+void ui_close(void) {}
+void ui_resize(const int ch, const char * const input,
+    const int size) {}
+
+GSList* ui_get_recipients(void) 
+{
+    return (GSList *)mock();
+}
+
+void ui_handle_special_keys(const wint_t * const ch, const char * const inp,
+    const int size) {}
+void ui_switch_win(const int i) {}
+void ui_next_win(void) {}
+void ui_previous_win(void) {}
+
+unsigned long ui_get_idle_time(void) 
+{
+    return (unsigned long)mock();
+}
+
+void ui_reset_idle_time(void) {}
+void ui_new_chat_win(const char * const to) {}
+void ui_print_error_from_recipient(const char * const from, const char *err_msg) {}
+void ui_print_system_msg_from_recipient(const char * const from, const char *message) {}
+void ui_handle_error_message(const char * const from, const char * const err_msg) {}
+
+gint ui_unread(void)
+{
+    return (gint)mock();
+}
+
+void ui_close_connected_win(int index) {}
+
+int ui_close_all_wins(void)
+{
+    return (int)mock();
+}
+
+int ui_close_read_wins(void)
+{
+    return (int)mock();
+}
+
+// current window actions
+void ui_close_current(void) {}
+void ui_clear_current(void) {}
+
+win_type_t ui_current_win_type(void)
+{
+    return (win_type_t)mock();
+}
+
+int ui_current_win_index(void)
+{
+    return (int)mock();
+}
+
+char* ui_current_recipient(void)
+{
+    return (char *)mock();
+}
+
+void ui_current_print_line(const char * const msg, ...) {}
+void ui_current_error_line(const char * const msg) {}
+void ui_current_page_off(void) {}
+
+win_type_t ui_win_type(int index)
+{
+    return (win_type_t)mock();
+}
+
+char * ui_recipient(int index)
+{
+    return (char *)mock();
+}
+
+void ui_close_win(int index) {}
+
+gboolean ui_win_exists(int index)
+{
+    return (gboolean)mock();
+}
+
+int ui_win_unread(int index)
+{
+    return (int)mock();
+}
+
+// ui events
+void ui_contact_typing(const char * const from) {}
+void ui_incoming_msg(const char * const from, const char * const message,
+    GTimeVal *tv_stamp, gboolean priv) {}
+void ui_contact_online(const char * const barejid, const char * const resource,
+    const char * const show, const char * const status, GDateTime *last_activity) {}
+void ui_contact_offline(const char * const from, const char * const show,
+    const char * const status) {}
+void ui_disconnected(void) {}
+void ui_recipient_gone(const char * const barejid) {}
+void ui_outgoing_msg(const char * const from, const char * const to,
+    const char * const message) {}
+void ui_room_join(Jid *jid) {}
+void ui_room_roster(const char * const room, GList *roster, const char * const presence) {}
+void ui_room_history(const char * const room_jid, const char * const nick,
+    GTimeVal tv_stamp, const char * const message) {}
+void ui_room_message(const char * const room_jid, const char * const nick,
+    const char * const message) {}
+void ui_room_subject(const char * const room_jid,
+    const char * const subject) {}
+void ui_room_broadcast(const char * const room_jid,
+    const char * const message) {}
+void ui_room_member_offline(const char * const room, const char * const nick) {}
+void ui_room_member_online(const char * const room,
+    const char * const nick, const char * const show, const char * const status) {}
+void ui_room_member_nick_change(const char * const room,
+    const char * const old_nick, const char * const nick) {}
+void ui_room_nick_change(const char * const room, const char * const nick) {}
+void ui_room_member_presence(const char * const room,
+    const char * const nick, const char * const show, const char * const status) {}
+void ui_roster_add(const char * const barejid, const char * const name) {}
+void ui_roster_remove(const char * const barejid) {}
+void ui_contact_already_in_group(const char * const contact, const char * const group) {}
+void ui_contact_not_in_group(const char * const contact, const char * const group) {}
+void ui_group_added(const char * const contact, const char * const group) {}
+void ui_group_removed(const char * const contact, const char * const group) {}
+
+// contact status functions
+void ui_status_room(const char * const contact) {}
+void ui_status(void) {}
+void ui_status_private(void) {}
+
+void ui_create_duck_win(void) {}
+void ui_open_duck_win(void) {}
+void ui_duck(const char * const query) {}
+void ui_duck_result(const char * const result) {}
+
+gboolean ui_duck_exists(void)
+{
+    return (gboolean)mock();
+}
+
+void ui_tidy_wins(void) {}
+void ui_prune_wins(void) {}
+
+// create windows
+void create_title_bar(void) {}
+void create_status_bar(void) {}
+void create_input_window(void) {}
+
+// title bar actions
+void title_bar_refresh(void) {}
+void title_bar_resize(void) {}
+void title_bar_show(const char * const title) {}
+void title_bar_title(void) {}
+void title_bar_set_status(contact_presence_t status) {}
+void title_bar_set_recipient(const char * const from) {}
+void title_bar_set_typing(gboolean is_typing) {}
+void title_bar_draw(void) {}
+
+// console window actions
+void cons_show(const char * const msg, ...)
+{
+    check_expected(msg);
+}
+
+void cons_about(void) {}
+void cons_help(void) {}
+void cons_basic_help(void) {}
+void cons_settings_help(void) {}
+void cons_presence_help(void) {}
+void cons_navigation_help(void) {}
+void cons_prefs(void) {}
+void cons_show_ui_prefs(void) {}
+void cons_show_desktop_prefs(void) {}
+void cons_show_chat_prefs(void) {}
+void cons_show_log_prefs(void) {}
+void cons_show_presence_prefs(void) {}
+void cons_show_connection_prefs(void) {}
+void cons_show_account(ProfAccount *account) {}
+void cons_debug(const char * const msg, ...) {}
+void cons_show_time(void) {}
+void cons_show_word(const char * const word) {}
+void cons_show_error(const char * const cmd, ...) {}
+void cons_highlight_show(const char * const cmd) {}
+void cons_show_contacts(GSList * list) {}
+void cons_show_roster(GSList * list) {}
+void cons_show_roster_group(const char * const group, GSList * list) {}
+void cons_show_wins(void) {}
+void cons_show_status(const char * const barejid) {}
+void cons_show_info(PContact pcontact) {}
+void cons_show_caps(const char * const contact, Resource *resource) {}
+void cons_show_themes(GSList *themes) {}
+void cons_show_login_success(ProfAccount *account) {}
+void cons_show_software_version(const char * const jid,
+    const char * const presence, const char * const name,
+    const char * const version, const char * const os) {}
+void cons_show_account_list(gchar **accounts) {}
+void cons_show_room_list(GSList *room, const char * const conference_node) {}
+void cons_show_bookmarks(const GList *list) {}
+void cons_show_disco_items(GSList *items, const char * const jid) {}
+void cons_show_disco_info(const char *from, GSList *identities, GSList *features) {}
+void cons_show_room_invite(const char * const invitor, const char * const room,
+    const char * const reason) {}
+void cons_check_version(gboolean not_available_msg) {}
+void cons_show_typing(const char * const barejid) {}
+void cons_show_incoming_message(const char * const short_from, const int win_index) {}
+void cons_show_room_invites(GSList *invites) {}
+void cons_show_received_subs(void) {}
+void cons_show_sent_subs(void) {}
+void cons_alert(void) {}
+void cons_theme_setting(void) {}
+void cons_beep_setting(void) {}
+void cons_flash_setting(void) {}
+void cons_splash_setting(void) {}
+void cons_vercheck_setting(void) {}
+void cons_mouse_setting(void) {}
+void cons_statuses_setting(void) {}
+void cons_titlebar_setting(void) {}
+void cons_notify_setting(void) {}
+void cons_states_setting(void) {}
+void cons_outtype_setting(void) {}
+void cons_intype_setting(void) {}
+void cons_gone_setting(void) {}
+void cons_history_setting(void) {}
+void cons_log_setting(void) {}
+void cons_chlog_setting(void) {}
+void cons_grlog_setting(void) {}
+void cons_autoaway_setting(void) {}
+void cons_reconnect_setting(void) {}
+void cons_autoping_setting(void) {}
+void cons_priority_setting(void) {}
+void cons_autoconnect_setting(void) {}
+
+// status bar actions
+void status_bar_refresh(void) {}
+void status_bar_resize(void) {}
+void status_bar_clear(void) {}
+void status_bar_clear_message(void) {}
+void status_bar_get_password(void) {}
+void status_bar_print_message(const char * const msg) {}
+void status_bar_inactive(const int win) {}
+void status_bar_active(const int win) {}
+void status_bar_new(const int win) {}
+void status_bar_update_time(void) {}
+void status_bar_set_all_inactive(void) {}
+void status_bar_current(int i) {}
+
+// input window actions
+wint_t inp_get_char(char *input, int *size)
+{
+    return (wint_t)mock();
+}
+void inp_win_reset(void) {}
+void inp_win_resize(const char * input, const int size) {}
+void inp_put_back(void) {}
+void inp_non_block(void) {}
+void inp_block(void) {}
+void inp_get_password(char *passwd) {}
+void inp_replace_input(char *input, const char * const new_input, int *size) {}
+
+void notifier_init(void) {}
+void notifier_uninit(void) {}
+
+void notify_typing(const char * const handle) {}
+void notify_message(const char * const handle, int win) {}
+void notify_room_message(const char * const handle, const char * const room,
+    int win) {}
+void notify_remind(void) {}
+void notify_invite(const char * const from, const char * const room,
+    const char * const reason) {}
+void notify_subscription(const char * const from) {}
diff --git a/tests/xmpp/mock_xmpp.c b/tests/xmpp/mock_xmpp.c
new file mode 100644
index 00000000..0c6bf917
--- /dev/null
+++ b/tests/xmpp/mock_xmpp.c
@@ -0,0 +1,150 @@
+/*
+ * xmpp.h
+ *
+ * Copyright (C) 2012, 2013 James Booth <boothj5@gmail.com>
+ *
+ * This file is part of Profanity.
+ *
+ * Profanity is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Profanity is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Profanity.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <glib.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "xmpp/xmpp.h"
+
+// connection functions
+void jabber_init(const int disable_tls) {}
+
+jabber_conn_status_t jabber_connect_with_details(const char * const jid,
+    const char * const passwd, const char * const altdomain)
+{
+    return (jabber_conn_status_t)mock();
+}
+
+jabber_conn_status_t jabber_connect_with_account(const ProfAccount * const account)
+{
+    return (jabber_conn_status_t)mock();
+}
+
+void jabber_disconnect(void) {}
+void jabber_shutdown(void) {}
+void jabber_process_events(void) {}
+const char * jabber_get_fulljid(void)
+{
+    return (const char *)mock();
+}
+const char * jabber_get_domain(void)
+{
+    return (const char *)mock();
+}
+
+jabber_conn_status_t jabber_get_connection_status(void)
+{
+    return (jabber_conn_status_t)mock();
+}
+
+char * jabber_get_presence_message(void)
+{
+    return (char *)mock();
+}
+void jabber_set_autoping(int seconds) {}
+
+char* jabber_get_account_name(void)
+{
+    return (char *)mock();
+}
+
+GList * jabber_get_available_resources(void)
+{
+    return (GList *)mock();
+}
+
+// message functions
+void message_send(const char * const msg, const char * const recipient) {}
+void message_send_groupchat(const char * const msg, const char * const recipient) {}
+void message_send_inactive(const char * const recipient) {}
+void message_send_composing(const char * const recipient) {}
+void message_send_paused(const char * const recipient) {}
+void message_send_gone(const char * const recipient) {}
+void message_send_invite(const char * const room, const char * const contact,
+    const char * const reason) {}
+void message_send_duck(const char * const query) {}
+
+// presence functions
+void presence_subscription(const char * const jid, const jabber_subscr_t action) {}
+
+GSList* presence_get_subscription_requests(void)
+{
+    return (GSList *)mock();
+}
+
+gint presence_sub_request_count(void)
+{
+    return (gint)mock();
+}
+
+void presence_reset_sub_request_search(void) {}
+
+char * presence_sub_request_find(char * search_str)
+{
+    return (char *)mock();
+}
+
+void presence_join_room(Jid *jid) {}
+void presence_change_room_nick(const char * const room, const char * const nick) {}
+void presence_leave_chat_room(const char * const room_jid) {}
+void presence_update(resource_presence_t status, const char * const msg,
+    int idle) {}
+gboolean presence_sub_request_exists(const char * const bare_jid)
+{
+    return (gboolean)mock();
+}
+
+// iq functions
+void iq_send_software_version(const char * const fulljid) {}
+void iq_room_list_request(gchar *conferencejid) {}
+void iq_disco_info_request(gchar *jid) {}
+void iq_disco_items_request(gchar *jid) {}
+
+// caps functions
+Capabilities* caps_get(const char * const caps_str)
+{
+    return (Capabilities *)mock();
+}
+
+void caps_close(void) {}
+
+void bookmark_add(const char *jid, const char *nick, gboolean autojoin) {}
+void bookmark_remove(const char *jid, gboolean autojoin) {}
+
+const GList *bookmark_get_list(void)
+{
+    return (const GList *)mock();
+}
+
+char *bookmark_find(char *search_str)
+{
+    return (char *)mock();
+}
+
+void bookmark_autocomplete_reset(void) {}
+
+void roster_send_name_change(const char * const barejid, const char * const new_name, GSList *groups) {}
+void roster_send_add_to_group(const char * const group, PContact contact) {}
+void roster_send_remove_from_group(const char * const group, PContact contact) {}
+void roster_add_new(const char * const barejid, const char * const name) {}
+void roster_send_remove(const char * const barejid) {}