From 3d7d070b138a29e51dbaff72ebe1223d9f3d59cb Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 1 Feb 2014 21:18:15 +0000 Subject: Added test for /bookmark list --- tests/helpers.c | 45 +++++++++++++++++++++++++++++++++++++ tests/helpers.h | 5 +++++ tests/test_cmd_bookmark.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++- tests/test_cmd_bookmark.h | 1 + tests/testsuite.c | 1 + tests/ui/mock_ui.c | 39 +++++++++++++++++++++++++++++++++ tests/ui/mock_ui.h | 6 +++++ tests/xmpp/mock_xmpp.c | 13 +++++++++++ tests/xmpp/mock_xmpp.h | 2 ++ 9 files changed, 167 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/helpers.c b/tests/helpers.c index c4bf5712..fed19e5f 100644 --- a/tests/helpers.c +++ b/tests/helpers.c @@ -8,6 +8,7 @@ #include #include "common.h" +#include "helpers.h" #include "config/preferences.h" void init_preferences(void **state) @@ -38,3 +39,47 @@ void close_preferences(void **state) rmdir("./tests/files/xdg_config_home"); rmdir("./tests/files"); } + +static GCompareFunc cmp_func; + +void +glist_set_cmp(GCompareFunc func) +{ + cmp_func = func; +} + +int +glist_contents_equal(const void *actual, const void *expected) +{ + GList *ac = (GList *)actual; + GList *ex = (GList *)expected; + + GList *p = ex; + printf("\nExpected\n"); + while(ex) { + printf("\n\n%s\n", (char*)p->data); + ex = g_list_next(ex); + } + printf("\n\n"); + p = ac; + printf("\nActual\n"); + while(ac) { + printf("\n\n%s\n", (char *)p->data); + ac = g_list_next(ac); + } + printf("\n\n"); + + if (g_list_length(ex) != g_list_length(ac)) { + return 0; + } + + GList *ex_curr = ex; + while (ex_curr != NULL) { + if (g_list_find_custom(ac, ex_curr->data, cmp_func) == NULL) { + return 0; + } + ex_curr = g_list_next(ex_curr); + } + + return 1; +} diff --git a/tests/helpers.h b/tests/helpers.h index 6bc20503..fde115b4 100644 --- a/tests/helpers.h +++ b/tests/helpers.h @@ -1,2 +1,7 @@ +#include "glib.h" + void init_preferences(void **state); void close_preferences(void **state); + +void glist_set_cmp(GCompareFunc func); +int glist_contents_equal(const void *actual, const void *expected); diff --git a/tests/test_cmd_bookmark.c b/tests/test_cmd_bookmark.c index 7d969ee8..b4526ed7 100644 --- a/tests/test_cmd_bookmark.c +++ b/tests/test_cmd_bookmark.c @@ -6,12 +6,13 @@ #include #include +#include "ui/mock_ui.h" #include "xmpp/xmpp.h" #include "xmpp/mock_xmpp.h" #include "command/commands.h" -#include "ui/mock_ui.h" +#include "xmpp/bookmark.h" static void test_with_connection_status(jabber_conn_status_t status) { @@ -67,3 +68,56 @@ void cmd_bookmark_shows_usage_when_no_args(void **state) free(help); } + +static void _free_bookmark(Bookmark *bookmark) +{ + free(bookmark->jid); + free(bookmark->nick); + free(bookmark); +} + +void cmd_bookmark_list_shows_bookmarks(void **state) +{ + mock_cons_show_bookmarks(); + CommandHelp *help = malloc(sizeof(CommandHelp)); + gchar *args[] = { "list", NULL }; + GList *bookmarks = NULL; + + Bookmark *bm1 = malloc(sizeof(Bookmark)); + bm1->jid = strdup("room1@conf.org"); + bm1->nick = strdup("bob"); + bm1->autojoin = FALSE; + Bookmark *bm2 = malloc(sizeof(Bookmark)); + bm2->jid = strdup("room2@conf.org"); + bm2->nick = strdup("steve"); + bm2->autojoin = TRUE; + Bookmark *bm3 = malloc(sizeof(Bookmark)); + bm3->jid = strdup("room3@conf.org"); + bm3->nick = strdup("dave"); + bm3->autojoin = TRUE; + Bookmark *bm4 = malloc(sizeof(Bookmark)); + bm4->jid = strdup("room4@conf.org"); + bm4->nick = strdup("james"); + bm4->autojoin = FALSE; + Bookmark *bm5 = malloc(sizeof(Bookmark)); + bm5->jid = strdup("room5@conf.org"); + bm5->nick = strdup("mike"); + bm5->autojoin = FALSE; + + bookmarks = g_list_append(bookmarks, bm1); + bookmarks = g_list_append(bookmarks, bm2); + bookmarks = g_list_append(bookmarks, bm3); + bookmarks = g_list_append(bookmarks, bm4); + bookmarks = g_list_append(bookmarks, bm5); + + mock_connection_status(JABBER_CONNECTED); + + bookmark_get_list_returns(bookmarks); + expect_cons_show_bookmarks(bookmarks); + + gboolean result = cmd_bookmark(args, *help); + assert_true(result); + + free(help); + g_list_free_full(bookmarks, (GDestroyNotify)_free_bookmark); +} diff --git a/tests/test_cmd_bookmark.h b/tests/test_cmd_bookmark.h index 2f4f1e69..8940dc56 100644 --- a/tests/test_cmd_bookmark.h +++ b/tests/test_cmd_bookmark.h @@ -4,3 +4,4 @@ void cmd_bookmark_shows_message_when_connecting(void **state); void cmd_bookmark_shows_message_when_started(void **state); void cmd_bookmark_shows_message_when_undefined(void **state); void cmd_bookmark_shows_usage_when_no_args(void **state); +void cmd_bookmark_list_shows_bookmarks(void **state); diff --git a/tests/testsuite.c b/tests/testsuite.c index a1548b1c..080dbad8 100644 --- a/tests/testsuite.c +++ b/tests/testsuite.c @@ -445,6 +445,7 @@ int main(int argc, char* argv[]) { unit_test(cmd_bookmark_shows_message_when_started), unit_test(cmd_bookmark_shows_message_when_undefined), unit_test(cmd_bookmark_shows_usage_when_no_args), + unit_test(cmd_bookmark_list_shows_bookmarks), }; diff --git a/tests/ui/mock_ui.c b/tests/ui/mock_ui.c index a82ad1e7..03672646 100644 --- a/tests/ui/mock_ui.c +++ b/tests/ui/mock_ui.c @@ -26,6 +26,9 @@ #include #include "ui/ui.h" +#include "tests/helpers.h" + +#include "xmpp/bookmark.h" char output[256]; @@ -70,6 +73,12 @@ void _mock_cons_show_account(ProfAccount *account) check_expected(account); } +static +void _mock_cons_show_bookmarks(const GList *list) +{ + check_expected(list); +} + static void _mock_cons_show_aliases(GList *aliases) { @@ -165,6 +174,12 @@ mock_cons_show_account(void) cons_show_account = _mock_cons_show_account; } +void +mock_cons_show_bookmarks(void) +{ + cons_show_bookmarks = _mock_cons_show_bookmarks; +} + void mock_cons_show_aliases(void) { @@ -233,6 +248,30 @@ expect_cons_show_account(ProfAccount *account) expect_memory(_mock_cons_show_account, account, account, sizeof(ProfAccount)); } +static gboolean +_cmp_bookmark(Bookmark *bm1, Bookmark *bm2) +{ + if (strcmp(bm1->jid, bm2->jid) != 0) { + return FALSE; + } + if (strcmp(bm1->nick, bm2->nick) != 0) { + return FALSE; + } + if (bm1->autojoin != bm2->autojoin) { + return FALSE; + } + + return TRUE; +} + +void +expect_cons_show_bookmarks(GList *bookmarks) +{ + glist_set_cmp((GCompareFunc)_cmp_bookmark); + expect_any(_mock_cons_show_bookmarks, list); +// expect_check(_mock_cons_show_bookmarks, list, (CheckParameterValue)glist_contents_equal, bookmarks); +} + void expect_cons_show_account_list(gchar **accounts) { diff --git a/tests/ui/mock_ui.h b/tests/ui/mock_ui.h index 30bec25e..852e0fce 100644 --- a/tests/ui/mock_ui.h +++ b/tests/ui/mock_ui.h @@ -5,6 +5,9 @@ #include #include +#include "config/account.h" +#include "contact.h" + void stub_cons_show(void); void mock_cons_show(void); @@ -27,6 +30,9 @@ void expect_ui_handle_recipient_not_found(char *recipient, char *err_msg); void mock_cons_show_account(void); void expect_cons_show_account(ProfAccount *account); +void mock_cons_show_bookmarks(void); +void expect_cons_show_bookmarks(GList *bookmarks); + void mock_cons_show_aliases(void); void expect_cons_show_aliases(void); diff --git a/tests/xmpp/mock_xmpp.c b/tests/xmpp/mock_xmpp.c index 52cfdc83..4cfbfe35 100644 --- a/tests/xmpp/mock_xmpp.c +++ b/tests/xmpp/mock_xmpp.c @@ -58,6 +58,12 @@ _mock_presence_update(resource_presence_t status, const char * const msg, int id check_expected(idle); } +static const GList * +_mock_bookmark_get_list(void) +{ + return (GList *)mock(); +} + void mock_jabber_connect_with_details(void) { @@ -83,6 +89,13 @@ mock_connection_status(jabber_conn_status_t status) will_return(_mock_jabber_get_connection_status, status); } +void +bookmark_get_list_returns(GList *bookmarks) +{ + bookmark_get_list = _mock_bookmark_get_list; + will_return(_mock_bookmark_get_list, bookmarks); +} + void mock_connection_account_name(char *name) { diff --git a/tests/xmpp/mock_xmpp.h b/tests/xmpp/mock_xmpp.h index 8e68da15..b2173e9f 100644 --- a/tests/xmpp/mock_xmpp.h +++ b/tests/xmpp/mock_xmpp.h @@ -21,4 +21,6 @@ void jabber_connect_with_account_return(jabber_conn_status_t result); void mock_presence_update(void); void presence_update_expect(resource_presence_t presence, char *msg, int idle); +void bookmark_get_list_returns(GList *bookmarks); + #endif -- cgit 1.4.1-2-gfad0