While trying to get the unit tests working again I stumbled over all those things that I thought could be better^TM. Now we also know "TODO: why does this make the test fail?" - because the unit tests are brittle AF ... and we have to init the subsystems we use in the test, otherwise the cleanup will fail... BTW. you can now also only run a single test ... or a pattern or so ... you'd have to read how `cmocka_set_test_filter()` works exactly. Signed-off-by: Steffen Jaeckel <s@jaeckel.eu>
422 lines
11 KiB
C
422 lines
11 KiB
C
#include <stdarg.h>
|
|
#include <stddef.h>
|
|
#include <setjmp.h>
|
|
#include <cmocka.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <glib.h>
|
|
|
|
#include "xmpp/xmpp.h"
|
|
|
|
#include "ui/ui.h"
|
|
#include "ui/stub_ui.h"
|
|
|
|
#include "xmpp/muc.h"
|
|
#include "common.h"
|
|
|
|
#include "command/cmd_funcs.h"
|
|
|
|
#include "xmpp/bookmark.h"
|
|
|
|
#include "helpers.h"
|
|
|
|
#define CMD_BOOKMARK "/bookmark"
|
|
|
|
static void
|
|
test_with_connection_status(jabber_conn_status_t status)
|
|
{
|
|
ProfWin window;
|
|
window.type = WIN_CONSOLE;
|
|
will_return(connection_get_status, status);
|
|
expect_cons_show("You are not currently connected.");
|
|
|
|
gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, NULL);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_shows_message_when_disconnected(void** state)
|
|
{
|
|
test_with_connection_status(JABBER_DISCONNECTED);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_shows_message_when_disconnecting(void** state)
|
|
{
|
|
test_with_connection_status(JABBER_DISCONNECTING);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_shows_message_when_connecting(void** state)
|
|
{
|
|
test_with_connection_status(JABBER_CONNECTING);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_shows_usage_when_no_args(void** state)
|
|
{
|
|
gchar* args[] = { NULL };
|
|
ProfWin window;
|
|
window.type = WIN_CONSOLE;
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(cons_bad_cmd_usage, cmd, CMD_BOOKMARK);
|
|
|
|
gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
/*
|
|
static void _free_bookmark(Bookmark *bookmark)
|
|
{
|
|
free(bookmark->barejid);
|
|
free(bookmark->nick);
|
|
free(bookmark);
|
|
}
|
|
*/
|
|
|
|
static gboolean
|
|
_cmp_bookmark(Bookmark* bm1, Bookmark* bm2)
|
|
{
|
|
if (strcmp(bm1->barejid, bm2->barejid) != 0) {
|
|
return FALSE;
|
|
}
|
|
if (strcmp(bm1->nick, bm2->nick) != 0) {
|
|
return FALSE;
|
|
}
|
|
if (bm1->autojoin != bm2->autojoin) {
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_list_shows_bookmarks(void** state)
|
|
{
|
|
gchar* args[] = { "list", NULL };
|
|
GList* bookmarks = NULL;
|
|
ProfWin window;
|
|
window.type = WIN_CONSOLE;
|
|
|
|
Bookmark* bm1 = malloc(sizeof(Bookmark));
|
|
bm1->barejid = strdup("room1@conf.org");
|
|
bm1->nick = strdup("bob");
|
|
bm1->autojoin = FALSE;
|
|
Bookmark* bm2 = malloc(sizeof(Bookmark));
|
|
bm2->barejid = strdup("room2@conf.org");
|
|
bm2->nick = strdup("steve");
|
|
bm2->autojoin = TRUE;
|
|
Bookmark* bm3 = malloc(sizeof(Bookmark));
|
|
bm3->barejid = strdup("room3@conf.org");
|
|
bm3->nick = strdup("dave");
|
|
bm3->autojoin = TRUE;
|
|
Bookmark* bm4 = malloc(sizeof(Bookmark));
|
|
bm4->barejid = strdup("room4@conf.org");
|
|
bm4->nick = strdup("james");
|
|
bm4->autojoin = FALSE;
|
|
Bookmark* bm5 = malloc(sizeof(Bookmark));
|
|
bm5->barejid = 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);
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
will_return(bookmark_get_list, bookmarks);
|
|
|
|
// TODO - Custom list compare
|
|
glist_set_cmp((GCompareFunc)_cmp_bookmark);
|
|
expect_any(cons_show_bookmarks, list);
|
|
|
|
gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
|
|
free(bm1->barejid);
|
|
free(bm1->nick);
|
|
free(bm1);
|
|
free(bm2->barejid);
|
|
free(bm2->nick);
|
|
free(bm2);
|
|
free(bm3->barejid);
|
|
free(bm3->nick);
|
|
free(bm3);
|
|
free(bm4->barejid);
|
|
free(bm4->nick);
|
|
free(bm4);
|
|
free(bm5->barejid);
|
|
free(bm5->nick);
|
|
free(bm5);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_add_shows_message_when_invalid_jid(void** state)
|
|
{
|
|
char* jid = "room";
|
|
gchar* args[] = { "add", jid, NULL };
|
|
ProfWin window;
|
|
window.type = WIN_CONSOLE;
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_cons_show("Invalid room, must be of the form room@domain.tld");
|
|
expect_cons_show("");
|
|
|
|
gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_add_adds_bookmark_with_jid(void** state)
|
|
{
|
|
char* jid = "room@conf.server";
|
|
gchar* args[] = { "add", jid, NULL };
|
|
ProfWin window;
|
|
window.type = WIN_CONSOLE;
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(bookmark_add, jid, jid);
|
|
expect_any(bookmark_add, nick);
|
|
expect_any(bookmark_add, password);
|
|
expect_any(bookmark_add, autojoin_str);
|
|
will_return(bookmark_add, TRUE);
|
|
|
|
expect_cons_show("Bookmark added for room@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_uses_roomjid_in_room(void** state)
|
|
{
|
|
muc_init();
|
|
|
|
gchar* args[] = { NULL };
|
|
ProfMucWin muc_win;
|
|
muc_win.window.type = WIN_MUC;
|
|
muc_win.memcheck = PROFMUCWIN_MEMCHECK;
|
|
muc_win.roomjid = "room@conf.server";
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(bookmark_add, jid, muc_win.roomjid);
|
|
expect_any(bookmark_add, nick);
|
|
expect_any(bookmark_add, password);
|
|
expect_any(bookmark_add, autojoin_str);
|
|
will_return(bookmark_add, TRUE);
|
|
|
|
expect_win_println("Bookmark added for room@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&muc_win.window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_add_uses_roomjid_in_room(void** state)
|
|
{
|
|
muc_init();
|
|
|
|
gchar* args[] = { "add", NULL };
|
|
ProfMucWin muc_win;
|
|
muc_win.window.type = WIN_MUC;
|
|
muc_win.memcheck = PROFMUCWIN_MEMCHECK;
|
|
muc_win.roomjid = "room@conf.server";
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(bookmark_add, jid, muc_win.roomjid);
|
|
expect_any(bookmark_add, nick);
|
|
expect_any(bookmark_add, password);
|
|
expect_any(bookmark_add, autojoin_str);
|
|
will_return(bookmark_add, TRUE);
|
|
|
|
expect_win_println("Bookmark added for room@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&muc_win.window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_add_uses_supplied_jid_in_room(void** state)
|
|
{
|
|
muc_init();
|
|
|
|
char* jid = "room1@conf.server";
|
|
gchar* args[] = { "add", jid, NULL };
|
|
ProfMucWin muc_win;
|
|
muc_win.window.type = WIN_MUC;
|
|
muc_win.memcheck = PROFMUCWIN_MEMCHECK;
|
|
muc_win.roomjid = "room2@conf.server";
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(bookmark_add, jid, jid);
|
|
expect_any(bookmark_add, nick);
|
|
expect_any(bookmark_add, password);
|
|
expect_any(bookmark_add, autojoin_str);
|
|
will_return(bookmark_add, TRUE);
|
|
|
|
expect_cons_show("Bookmark added for room1@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&muc_win.window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_add_adds_bookmark_with_jid_nick(void** state)
|
|
{
|
|
char* jid = "room@conf.server";
|
|
char* nick = "bob";
|
|
gchar* args[] = { "add", jid, "nick", nick, NULL };
|
|
ProfWin window;
|
|
window.type = WIN_CONSOLE;
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(bookmark_add, jid, jid);
|
|
expect_string(bookmark_add, nick, nick);
|
|
expect_any(bookmark_add, password);
|
|
expect_any(bookmark_add, autojoin_str);
|
|
will_return(bookmark_add, TRUE);
|
|
|
|
expect_cons_show("Bookmark added for room@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_add_adds_bookmark_with_jid_autojoin(void** state)
|
|
{
|
|
char* jid = "room@conf.server";
|
|
gchar* args[] = { "add", jid, "autojoin", "on", NULL };
|
|
ProfWin window;
|
|
window.type = WIN_CONSOLE;
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(bookmark_add, jid, jid);
|
|
expect_any(bookmark_add, nick);
|
|
expect_any(bookmark_add, password);
|
|
expect_string(bookmark_add, autojoin_str, "on");
|
|
will_return(bookmark_add, TRUE);
|
|
|
|
expect_cons_show("Bookmark added for room@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_add_adds_bookmark_with_jid_nick_autojoin(void** state)
|
|
{
|
|
char* jid = "room@conf.server";
|
|
char* nick = "bob";
|
|
gchar* args[] = { "add", jid, "nick", nick, "autojoin", "on", NULL };
|
|
ProfWin window;
|
|
window.type = WIN_CONSOLE;
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(bookmark_add, jid, jid);
|
|
expect_string(bookmark_add, nick, nick);
|
|
expect_any(bookmark_add, password);
|
|
expect_string(bookmark_add, autojoin_str, "on");
|
|
will_return(bookmark_add, TRUE);
|
|
|
|
expect_cons_show("Bookmark added for room@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_remove_removes_bookmark(void** state)
|
|
{
|
|
char* jid = "room@conf.server";
|
|
gchar* args[] = { "remove", jid, NULL };
|
|
ProfWin window;
|
|
window.type = WIN_CONSOLE;
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(bookmark_remove, jid, jid);
|
|
will_return(bookmark_remove, TRUE);
|
|
|
|
expect_cons_show("Bookmark removed for room@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_remove_shows_message_when_no_bookmark(void** state)
|
|
{
|
|
char* jid = "room@conf.server";
|
|
gchar* args[] = { "remove", jid, NULL };
|
|
ProfWin window;
|
|
window.type = WIN_CONSOLE;
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_any(bookmark_remove, jid);
|
|
will_return(bookmark_remove, FALSE);
|
|
|
|
expect_cons_show("No bookmark exists for room@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_remove_uses_roomjid_in_room(void** state)
|
|
{
|
|
muc_init();
|
|
|
|
gchar* args[] = { "remove", NULL };
|
|
ProfMucWin muc_win;
|
|
muc_win.window.type = WIN_MUC;
|
|
muc_win.memcheck = PROFMUCWIN_MEMCHECK;
|
|
muc_win.roomjid = "room@conf.server";
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(bookmark_remove, jid, muc_win.roomjid);
|
|
will_return(bookmark_remove, TRUE);
|
|
|
|
expect_win_println("Bookmark removed for room@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&muc_win.window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|
|
|
|
void
|
|
cmd_bookmark_remove_uses_supplied_jid_in_room(void** state)
|
|
{
|
|
muc_init();
|
|
|
|
char* jid = "room1@conf.server";
|
|
gchar* args[] = { "remove", jid, NULL };
|
|
ProfMucWin muc_win;
|
|
muc_win.window.type = WIN_MUC;
|
|
muc_win.memcheck = PROFMUCWIN_MEMCHECK;
|
|
muc_win.roomjid = "room2@conf.server";
|
|
|
|
will_return(connection_get_status, JABBER_CONNECTED);
|
|
|
|
expect_string(bookmark_remove, jid, jid);
|
|
will_return(bookmark_remove, TRUE);
|
|
|
|
expect_cons_show("Bookmark removed for room1@conf.server.");
|
|
|
|
gboolean result = cmd_bookmark(&muc_win.window, CMD_BOOKMARK, args);
|
|
assert_true(result);
|
|
}
|