about summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/functionaltests/functionaltests.c9
-rw-r--r--tests/functionaltests/test_muc.c54
-rw-r--r--tests/functionaltests/test_muc.h2
-rw-r--r--tests/functionaltests/test_ping.c117
-rw-r--r--tests/functionaltests/test_ping.h7
-rw-r--r--tests/functionaltests/test_rooms.c12
-rw-r--r--tests/unittests/test_cmd_bookmark.c130
-rw-r--r--tests/unittests/test_cmd_bookmark.h5
-rw-r--r--tests/unittests/test_cmd_rooms.c34
-rw-r--r--tests/unittests/test_cmd_rooms.h3
-rw-r--r--tests/unittests/ui/stub_ui.c11
-rw-r--r--tests/unittests/unittests.c26
-rw-r--r--tests/unittests/xmpp/stub_xmpp.c4
13 files changed, 393 insertions, 21 deletions
diff --git a/tests/functionaltests/functionaltests.c b/tests/functionaltests/functionaltests.c
index 1e01071d..5e8656b7 100644
--- a/tests/functionaltests/functionaltests.c
+++ b/tests/functionaltests/functionaltests.c
@@ -35,8 +35,11 @@ int main(int argc, char* argv[]) {
         PROF_FUNC_TEST(connect_bad_password),
         PROF_FUNC_TEST(connect_shows_presence_updates),
 
-        PROF_FUNC_TEST(ping_multiple),
-        PROF_FUNC_TEST(ping_responds),
+        PROF_FUNC_TEST(ping_server),
+        PROF_FUNC_TEST(ping_server_not_supported),
+        PROF_FUNC_TEST(ping_responds_to_server_request),
+        PROF_FUNC_TEST(ping_jid),
+        PROF_FUNC_TEST(ping_jid_not_supported),
 
         PROF_FUNC_TEST(rooms_query),
 
@@ -98,6 +101,8 @@ int main(int argc, char* argv[]) {
         PROF_FUNC_TEST(shows_history_message),
         PROF_FUNC_TEST(shows_occupant_join),
         PROF_FUNC_TEST(shows_message),
+        PROF_FUNC_TEST(shows_me_message_from_occupant),
+        PROF_FUNC_TEST(shows_me_message_from_self),
         PROF_FUNC_TEST(shows_all_messages_in_console_when_window_not_focussed),
         PROF_FUNC_TEST(shows_first_message_in_console_when_window_not_focussed),
         PROF_FUNC_TEST(shows_no_message_in_console_when_window_not_focussed),
diff --git a/tests/functionaltests/test_muc.c b/tests/functionaltests/test_muc.c
index e7fc8dcb..3aac9988 100644
--- a/tests/functionaltests/test_muc.c
+++ b/tests/functionaltests/test_muc.c
@@ -209,6 +209,60 @@ shows_message(void **state)
 }
 
 void
+shows_me_message_from_occupant(void **state)
+{
+    prof_connect();
+
+    stbbr_for_id("prof_join_4",
+        "<presence id='prof_join_4' lang='en' to='stabber@localhost/profanity' from='testroom@conference.localhost/stabber'>"
+            "<c hash='sha-1' xmlns='http://jabber.org/protocol/caps' node='http://www.profanity.im' ver='*'/>"
+            "<x xmlns='http://jabber.org/protocol/muc#user'>"
+                "<item role='participant' jid='stabber@localhost/profanity' affiliation='none'/>"
+            "</x>"
+            "<status code='110'/>"
+        "</presence>"
+    );
+
+    prof_input("/join testroom@conference.localhost");
+    assert_true(prof_output_exact("-> You have joined the room as stabber, role: participant, affiliation: none"));
+
+    stbbr_send(
+        "<message type='groupchat' to='stabber@localhost/profanity' from='testroom@conference.localhost/testoccupant'>"
+            "<body>/me did something</body>"
+        "</message>"
+    );
+
+    assert_true(prof_output_exact("*testoccupant did something"));
+}
+
+void
+shows_me_message_from_self(void **state)
+{
+    prof_connect();
+
+    stbbr_for_id("prof_join_4",
+        "<presence id='prof_join_4' lang='en' to='stabber@localhost/profanity' from='testroom@conference.localhost/stabber'>"
+            "<c hash='sha-1' xmlns='http://jabber.org/protocol/caps' node='http://www.profanity.im' ver='*'/>"
+            "<x xmlns='http://jabber.org/protocol/muc#user'>"
+                "<item role='participant' jid='stabber@localhost/profanity' affiliation='none'/>"
+            "</x>"
+            "<status code='110'/>"
+        "</presence>"
+    );
+
+    prof_input("/join testroom@conference.localhost");
+    assert_true(prof_output_exact("-> You have joined the room as stabber, role: participant, affiliation: none"));
+
+    stbbr_send(
+        "<message type='groupchat' to='stabber@localhost/profanity' from='testroom@conference.localhost/stabber'>"
+            "<body>/me did something</body>"
+        "</message>"
+    );
+
+    assert_true(prof_output_exact("*stabber did something"));
+}
+
+void
 shows_all_messages_in_console_when_window_not_focussed(void **state)
 {
     prof_connect();
diff --git a/tests/functionaltests/test_muc.h b/tests/functionaltests/test_muc.h
index 4f3c4f5d..1636bd05 100644
--- a/tests/functionaltests/test_muc.h
+++ b/tests/functionaltests/test_muc.h
@@ -7,6 +7,8 @@ void shows_subject_on_join(void **state);
 void shows_history_message(void **state);
 void shows_occupant_join(void **state);
 void shows_message(void **state);
+void shows_me_message_from_occupant(void **state);
+void shows_me_message_from_self(void **state);
 void shows_all_messages_in_console_when_window_not_focussed(void **state);
 void shows_first_message_in_console_when_window_not_focussed(void **state);
 void shows_no_message_in_console_when_window_not_focussed(void **state);
diff --git a/tests/functionaltests/test_ping.c b/tests/functionaltests/test_ping.c
index ecbbfee1..5bb937b6 100644
--- a/tests/functionaltests/test_ping.c
+++ b/tests/functionaltests/test_ping.c
@@ -12,8 +12,17 @@
 #include "proftest.h"
 
 void
-ping_multiple(void **state)
+ping_server(void **state)
 {
+    stbbr_for_id("prof_disco_info_onconnect_2",
+        "<iq id='prof_disco_info_onconnect_2' to='stabber@localhost/profanity' type='result' from='localhost'>"
+            "<query xmlns='http://jabber.org/protocol/disco#info'>"
+                "<identity category='server' type='im' name='Prosody'/>"
+                "<feature var='urn:xmpp:ping'/>"
+            "</query>"
+        "</iq>"
+    );
+
     stbbr_for_id("prof_ping_4",
         "<iq id='prof_ping_4' type='result' to='stabber@localhost/profanity'/>"
     );
@@ -41,7 +50,24 @@ ping_multiple(void **state)
 }
 
 void
-ping_responds(void **state)
+ping_server_not_supported(void **state)
+{
+    stbbr_for_id("prof_disco_info_onconnect_2",
+        "<iq id='prof_disco_info_onconnect_2' to='stabber@localhost/profanity' type='result' from='localhost'>"
+            "<query xmlns='http://jabber.org/protocol/disco#info'>"
+                "<identity category='server' type='im' name='Stabber'/>"
+            "</query>"
+        "</iq>"
+    );
+
+    prof_connect();
+
+    prof_input("/ping");
+    assert_true(prof_output_exact("Server does not support ping requests."));
+}
+
+void
+ping_responds_to_server_request(void **state)
 {
     prof_connect();
 
@@ -55,3 +81,90 @@ ping_responds(void **state)
         "<iq id='pingtest1' type='result' from='stabber@localhost/profanity' to='localhost'/>"
     ));
 }
+
+void ping_jid(void **state)
+{
+    stbbr_for_id("prof_caps_4",
+        "<iq id='prof_caps_4' to='stabber@localhost/profanity' type='result' from='buddy1@localhost/mobile'>"
+            "<query xmlns='http://jabber.org/protocol/disco#info' node='http://www.profanity.im#LpT2xs3nun7jC2sq4gg3WRDQFZ4='>"
+                "<identity category='client' type='console' name='Profanity0.6.0'/>"
+                "<feature var='urn:xmpp:ping'/>"
+                "<feature var='http://jabber.org/protocol/disco#info'/>"
+                "<feature var='http://jabber.org/protocol/caps'/>"
+            "</query>"
+        "</iq>"
+    );
+
+    prof_connect();
+
+    stbbr_send(
+        "<presence to='stabber@localhost' from='buddy1@localhost/mobile'>"
+            "<priority>10</priority>"
+            "<status>I'm here</status>"
+            "<c "
+                "hash='sha-1' "
+                "xmlns='http://jabber.org/protocol/caps' "
+                "node='http://www.profanity.im' "
+                "ver='LpT2xs3nun7jC2sq4gg3WRDQFZ4='"
+            "/>"
+        "</presence>"
+    );
+    assert_true(prof_output_exact("Buddy1 (mobile) is online, \"I'm here\""));
+
+    assert_true(stbbr_received(
+        "<iq id='prof_caps_4' to='buddy1@localhost/mobile' type='get'>"
+            "<query xmlns='http://jabber.org/protocol/disco#info' node='http://www.profanity.im#LpT2xs3nun7jC2sq4gg3WRDQFZ4='/>"
+        "</iq>"
+    ));
+
+    stbbr_for_id("prof_ping_5",
+        "<iq from='buddy1@localhost/mobile' to='stabber@localhost' id='prof_ping_5' type='result'/>"
+    );
+
+    prof_input("/ping buddy1@localhost/mobile");
+
+    assert_true(stbbr_received(
+        "<iq id='prof_ping_5' type='get' to='buddy1@localhost/mobile'>"
+            "<ping xmlns='urn:xmpp:ping'/>"
+        "</iq>"
+    ));
+    assert_true(prof_output_exact("Ping response from buddy1@localhost/mobile"));
+}
+
+void ping_jid_not_supported(void **state)
+{
+    stbbr_for_id("prof_caps_4",
+        "<iq id='prof_caps_4' to='stabber@localhost/profanity' type='result' from='buddy1@localhost/mobile'>"
+            "<query xmlns='http://jabber.org/protocol/disco#info' node='http://www.profanity.im#LpT2xs3nun7jC2sq4gg3WRDQFZ4='>"
+                "<identity category='client' type='console' name='Profanity0.6.0'/>"
+                "<feature var='http://jabber.org/protocol/disco#info'/>"
+                "<feature var='http://jabber.org/protocol/caps'/>"
+            "</query>"
+        "</iq>"
+    );
+
+    prof_connect();
+
+    stbbr_send(
+        "<presence to='stabber@localhost' from='buddy1@localhost/mobile'>"
+            "<priority>10</priority>"
+            "<status>I'm here</status>"
+            "<c "
+                "hash='sha-1' "
+                "xmlns='http://jabber.org/protocol/caps' "
+                "node='http://www.profanity.im' "
+                "ver='LpT2xs3nun7jC2sq4gg3WRDQFZ4='"
+            "/>"
+        "</presence>"
+    );
+    assert_true(prof_output_exact("Buddy1 (mobile) is online, \"I'm here\""));
+
+    assert_true(stbbr_received(
+        "<iq id='prof_caps_4' to='buddy1@localhost/mobile' type='get'>"
+            "<query xmlns='http://jabber.org/protocol/disco#info' node='http://www.profanity.im#LpT2xs3nun7jC2sq4gg3WRDQFZ4='/>"
+        "</iq>"
+    ));
+
+    prof_input("/ping buddy1@localhost/mobile");
+    assert_true(prof_output_exact("buddy1@localhost/mobile does not support ping requests."));
+}
diff --git a/tests/functionaltests/test_ping.h b/tests/functionaltests/test_ping.h
index a222a486..1f2eeb91 100644
--- a/tests/functionaltests/test_ping.h
+++ b/tests/functionaltests/test_ping.h
@@ -1,2 +1,5 @@
-void ping_multiple(void **state);
-void ping_responds(void **state);
+void ping_server(void **state);
+void ping_server_not_supported(void **state);
+void ping_responds_to_server_request(void **state);
+void ping_jid(void **state);
+void ping_jid_not_supported(void **state);
diff --git a/tests/functionaltests/test_rooms.c b/tests/functionaltests/test_rooms.c
index c0103279..49b1d892 100644
--- a/tests/functionaltests/test_rooms.c
+++ b/tests/functionaltests/test_rooms.c
@@ -14,8 +14,8 @@
 void
 rooms_query(void **state)
 {
-    stbbr_for_id("confreq",
-        "<iq id='confreq' type='result' to='stabber@localhost/profanity' from='conference.localhost'>"
+    stbbr_for_id("prof_confreq_4",
+        "<iq id='prof_confreq_4' type='result' to='stabber@localhost/profanity' from='conference.localhost'>"
             "<query xmlns='http://jabber.org/protocol/disco#items'>"
                 "<item jid='chatroom@conference.localhost' name='A chat room'/>"
                 "<item jid='hangout@conference.localhost' name='Another chat room'/>"
@@ -25,13 +25,13 @@ rooms_query(void **state)
 
     prof_connect();
 
-    prof_input("/rooms conference.localhost");
+    prof_input("/rooms service conference.localhost");
 
-    assert_true(prof_output_exact("chatroom@conference.localhost, (A chat room)"));
-    assert_true(prof_output_exact("hangout@conference.localhost, (Another chat room)"));
+    assert_true(prof_output_exact("chatroom@conference.localhost (A chat room)"));
+    assert_true(prof_output_exact("hangout@conference.localhost (Another chat room)"));
 
     assert_true(stbbr_last_received(
-        "<iq id='confreq' to='conference.localhost' type='get'>"
+        "<iq id='prof_confreq_4' to='conference.localhost' type='get'>"
             "<query xmlns='http://jabber.org/protocol/disco#items'/>"
         "</iq>"
     ));
diff --git a/tests/unittests/test_cmd_bookmark.c b/tests/unittests/test_cmd_bookmark.c
index 901d31f8..fb1f7996 100644
--- a/tests/unittests/test_cmd_bookmark.c
+++ b/tests/unittests/test_cmd_bookmark.c
@@ -24,10 +24,12 @@
 
 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(NULL, CMD_BOOKMARK, NULL);
+    gboolean result = cmd_bookmark(&window, CMD_BOOKMARK, NULL);
     assert_true(result);
 }
 
@@ -165,6 +167,85 @@ void cmd_bookmark_add_adds_bookmark_with_jid(void **state)
     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, CMD_BOOKMARK, args);
+    assert_true(result);
+
+    muc_close();
+}
+
+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, CMD_BOOKMARK, args);
+    assert_true(result);
+
+    muc_close();
+}
+
+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, CMD_BOOKMARK, args);
+    assert_true(result);
+
+    muc_close();
+}
+
 void cmd_bookmark_add_adds_bookmark_with_jid_nick(void **state)
 {
     char *jid = "room@conf.server";
@@ -265,3 +346,50 @@ void cmd_bookmark_remove_shows_message_when_no_bookmark(void **state)
     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, CMD_BOOKMARK, args);
+    assert_true(result);
+
+    muc_close();
+}
+
+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, CMD_BOOKMARK, args);
+    assert_true(result);
+
+    muc_close();
+}
diff --git a/tests/unittests/test_cmd_bookmark.h b/tests/unittests/test_cmd_bookmark.h
index abbdbe98..195882b5 100644
--- a/tests/unittests/test_cmd_bookmark.h
+++ b/tests/unittests/test_cmd_bookmark.h
@@ -6,6 +6,11 @@ void cmd_bookmark_shows_usage_when_no_args(void **state);
 void cmd_bookmark_list_shows_bookmarks(void **state);
 void cmd_bookmark_add_shows_message_when_invalid_jid(void **state);
 void cmd_bookmark_add_adds_bookmark_with_jid(void **state);
+void cmd_bookmark_uses_roomjid_in_room(void **state);
+void cmd_bookmark_add_uses_roomjid_in_room(void **state);
+void cmd_bookmark_add_uses_supplied_jid_in_room(void **state);
+void cmd_bookmark_remove_uses_roomjid_in_room(void **state);
+void cmd_bookmark_remove_uses_supplied_jid_in_room(void **state);
 void cmd_bookmark_add_adds_bookmark_with_jid_nick(void **state);
 void cmd_bookmark_add_adds_bookmark_with_jid_autojoin(void **state);
 void cmd_bookmark_add_adds_bookmark_with_jid_nick_autojoin(void **state);
diff --git a/tests/unittests/test_cmd_rooms.c b/tests/unittests/test_cmd_rooms.c
index 2cb6be6b..b04e5618 100644
--- a/tests/unittests/test_cmd_rooms.c
+++ b/tests/unittests/test_cmd_rooms.c
@@ -53,19 +53,49 @@ void cmd_rooms_uses_account_default_when_no_arg(void **state)
     expect_any(accounts_get_account, name);
     will_return(accounts_get_account, account);
 
+    expect_cons_show("");
+    expect_cons_show("Room list request sent: default_conf_server");
+
     expect_string(iq_room_list_request, conferencejid, "default_conf_server");
+    expect_any(iq_room_list_request, filter);
 
     gboolean result = cmd_rooms(NULL, CMD_ROOMS, args);
     assert_true(result);
 }
 
-void cmd_rooms_arg_used_when_passed(void **state)
+void cmd_rooms_service_arg_used_when_passed(void **state)
 {
-    gchar *args[] = { "conf_server_arg" };
+    gchar *args[] = { "service", "conf_server_arg", NULL };
 
     will_return(connection_get_status, JABBER_CONNECTED);
 
+    expect_cons_show("");
+    expect_cons_show("Room list request sent: conf_server_arg");
+
     expect_string(iq_room_list_request, conferencejid, "conf_server_arg");
+    expect_any(iq_room_list_request, filter);
+
+    gboolean result = cmd_rooms(NULL, CMD_ROOMS, args);
+    assert_true(result);
+}
+
+void cmd_rooms_filter_arg_used_when_passed(void **state)
+{
+    gchar *args[] = { "filter", "text", NULL };
+
+    ProfAccount *account = account_new("testaccount", NULL, NULL, NULL, TRUE, NULL, 0, NULL, NULL, NULL,
+        0, 0, 0, 0, 0, strdup("default_conf_server"), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+
+    will_return(connection_get_status, JABBER_CONNECTED);
+    will_return(session_get_account_name, "account_name");
+    expect_any(accounts_get_account, name);
+    will_return(accounts_get_account, account);
+
+    expect_cons_show("");
+    expect_cons_show("Room list request sent: default_conf_server, filter: 'text'");
+
+    expect_any(iq_room_list_request, conferencejid);
+    expect_string(iq_room_list_request, filter, "text");
 
     gboolean result = cmd_rooms(NULL, CMD_ROOMS, args);
     assert_true(result);
diff --git a/tests/unittests/test_cmd_rooms.h b/tests/unittests/test_cmd_rooms.h
index 1b13cf07..4d656948 100644
--- a/tests/unittests/test_cmd_rooms.h
+++ b/tests/unittests/test_cmd_rooms.h
@@ -3,4 +3,5 @@ void cmd_rooms_shows_message_when_disconnecting(void **state);
 void cmd_rooms_shows_message_when_connecting(void **state);
 void cmd_rooms_shows_message_when_undefined(void **state);
 void cmd_rooms_uses_account_default_when_no_arg(void **state);
-void cmd_rooms_arg_used_when_passed(void **state);
+void cmd_rooms_service_arg_used_when_passed(void **state);
+void cmd_rooms_filter_arg_used_when_passed(void **state);
diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c
index f2d8c5d7..420653e1 100644
--- a/tests/unittests/ui/stub_ui.c
+++ b/tests/unittests/ui/stub_ui.c
@@ -445,8 +445,10 @@ void cons_autoaway_setting(void) {}
 void cons_reconnect_setting(void) {}
 void cons_autoping_setting(void) {}
 void cons_autoconnect_setting(void) {}
+void cons_rooms_cache_setting(void) {}
 void cons_inpblock_setting(void) {}
 void cons_winpos_setting(void) {}
+void cons_statusbar_setting(void) {}
 void cons_tray_setting(void) {}
 
 void cons_show_contact_online(PContact contact, Resource *resource, GDateTime *last_activity)
@@ -465,8 +467,8 @@ void title_bar_set_presence(contact_presence_t presence) {}
 
 // status bar
 void status_bar_inactive(const int win) {}
-void status_bar_active(const int win) {}
-void status_bar_new(const int win) {}
+void status_bar_active(const int win, win_type_t type, char *identifier) {}
+void status_bar_new(const int win, win_type_t type, char *identifier) {}
 void status_bar_set_all_inactive(void) {}
 
 // roster window
@@ -505,6 +507,11 @@ ProfWin* win_create_plugin(const char *const plugin_name, const char * const tag
     return NULL;
 }
 
+char* win_get_tab_identifier(ProfWin *window)
+{
+    return NULL;
+}
+
 void win_update_virtual(ProfWin *window) {}
 void win_free(ProfWin *window) {}
 gboolean win_notify_remind(ProfWin *window)
diff --git a/tests/unittests/unittests.c b/tests/unittests/unittests.c
index 2938b9ff..4e3e149e 100644
--- a/tests/unittests/unittests.c
+++ b/tests/unittests/unittests.c
@@ -6,7 +6,9 @@
 #include <setjmp.h>
 #include <cmocka.h>
 #include <sys/stat.h>
+#include <stdlib.h>
 #include <locale.h>
+#include <langinfo.h>
 
 #include "config.h"
 #include "xmpp/chat_session.h"
@@ -38,7 +40,21 @@
 #include "test_plugins_disco.h"
 
 int main(int argc, char* argv[]) {
-    setlocale(LC_ALL, "");
+    setlocale(LC_ALL, "en_GB.UTF-8");
+    char *codeset = nl_langinfo(CODESET);
+    char *lang = getenv("LANG");
+
+    printf("Charset information:\n");
+
+    if (lang) {
+        printf("  LANG:       %s\n", lang);
+    }
+    if (codeset) {
+        printf("  CODESET:    %s\n", codeset);
+    }
+    printf("  MB_CUR_MAX: %d\n", MB_CUR_MAX);
+    printf("  MB_LEN_MAX: %d\n", MB_LEN_MAX);
+
     const UnitTest all_tests[] = {
 
         unit_test(replace_one_substr),
@@ -297,7 +313,8 @@ int main(int argc, char* argv[]) {
         unit_test(cmd_rooms_shows_message_when_disconnecting),
         unit_test(cmd_rooms_shows_message_when_connecting),
         unit_test(cmd_rooms_uses_account_default_when_no_arg),
-        unit_test(cmd_rooms_arg_used_when_passed),
+        unit_test(cmd_rooms_service_arg_used_when_passed),
+        unit_test(cmd_rooms_filter_arg_used_when_passed),
 
         unit_test(cmd_account_shows_usage_when_not_connected_and_no_args),
         unit_test(cmd_account_shows_account_when_connected_and_no_args),
@@ -476,6 +493,11 @@ int main(int argc, char* argv[]) {
         unit_test(cmd_bookmark_list_shows_bookmarks),
         unit_test(cmd_bookmark_add_shows_message_when_invalid_jid),
         unit_test(cmd_bookmark_add_adds_bookmark_with_jid),
+        unit_test(cmd_bookmark_uses_roomjid_in_room),
+        unit_test(cmd_bookmark_add_uses_roomjid_in_room),
+        unit_test(cmd_bookmark_add_uses_supplied_jid_in_room),
+        unit_test(cmd_bookmark_remove_uses_roomjid_in_room),
+        unit_test(cmd_bookmark_remove_uses_supplied_jid_in_room),
         unit_test(cmd_bookmark_add_adds_bookmark_with_jid_nick),
         unit_test(cmd_bookmark_add_adds_bookmark_with_jid_autojoin),
         unit_test(cmd_bookmark_add_adds_bookmark_with_jid_nick_autojoin),
diff --git a/tests/unittests/xmpp/stub_xmpp.c b/tests/unittests/xmpp/stub_xmpp.c
index 630c0b19..45db6649 100644
--- a/tests/unittests/xmpp/stub_xmpp.c
+++ b/tests/unittests/xmpp/stub_xmpp.c
@@ -172,9 +172,10 @@ void iq_disable_carbons() {};
 void iq_enable_carbons() {};
 void iq_send_software_version(const char * const fulljid) {}
 
-void iq_room_list_request(gchar *conferencejid)
+void iq_room_list_request(gchar *conferencejid, gchar *filter)
 {
     check_expected(conferencejid);
+    check_expected(filter);
 }
 
 void iq_disco_info_request(gchar *jid) {}
@@ -203,6 +204,7 @@ void iq_room_role_set(const char * const room, const char * const nick, char *ro
 void iq_room_role_list(const char * const room, char *role) {}
 void iq_last_activity_request(gchar *jid) {}
 void iq_autoping_check(void) {}
+void iq_rooms_cache_clear(void) {}
 
 // caps functions
 void caps_add_feature(char *feature) {}