about summary refs log tree commit diff stats
path: root/shell/cell.mu
Commit message (Expand)AuthorAgeFilesLines
* .Kartik K. Agaram2021-06-121-2/+2
* .Kartik K. Agaram2021-05-041-0/+1
* .Kartik K. Agaram2021-04-281-0/+14
* start cleaning up pixel graphicsKartik K. Agaram2021-04-191-2/+2
* shell: ctrl-r runs on real screen without a traceKartik K. Agaram2021-04-171-6/+3
* .Kartik K. Agaram2021-04-171-2/+2
* shell: streams that you can append graphemes toKartik K. Agaram2021-04-101-2/+12
* shell: fake keyboardKartik K. Agaram2021-04-101-0/+13
* shell: UI now showing fake keyboardKartik K. Agaram2021-04-101-4/+13
* shell: start on support for fake keyboardKartik K. Agaram2021-04-101-0/+12
* shell: move fake screen to sandboxKartik K. Agaram2021-04-101-0/+13
* shell: fake screensKartik K. Agaram2021-04-101-0/+2
* shell: start of 'print' primitiveKartik K. Agaram2021-04-101-0/+19
* shell: structural equality checkKartik K. Agaram2021-04-091-0/+4
* 7862 - shell: more informative traces for evalKartik K. Agaram2021-03-071-1/+1
* 7856 - shell: primitive functionsKartik K. Agaram2021-03-051-2/+25
* 7842 - new directory organizationKartik K. Agaram2021-03-031-0/+89
1'>191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>

#include "ui/ui.h"
#include "ui/stub_ui.h"

#include "xmpp/xmpp.h"
#include "xmpp/roster_list.h"
#include "command/cmd_funcs.h"

#define CMD_ROSTER "/roster"

static void
test_with_connection_status(jabber_conn_status_t status)
{
    gchar* args[] = { NULL };

    will_return(connection_get_status, status);

    expect_cons_show("You are not currently connected.");

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);
}

void
cmd_roster_shows_message_when_disconnecting(void** state)
{
    test_with_connection_status(JABBER_DISCONNECTING);
}

void
cmd_roster_shows_message_when_connecting(void** state)
{
    test_with_connection_status(JABBER_CONNECTING);
}

void
cmd_roster_shows_message_when_disconnected(void** state)
{
    test_with_connection_status(JABBER_DISCONNECTED);
}

void
cmd_roster_shows_roster_when_no_args(void** state)
{
    gchar* args[] = { NULL };

    will_return(connection_get_status, JABBER_CONNECTED);

    roster_create();
    roster_add("bob@server.org", "bob", NULL, "both", FALSE);
    GSList* roster = roster_get_contacts(ROSTER_ORD_NAME);

    expect_memory(cons_show_roster, list, roster, sizeof(roster));

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);

    g_slist_free(roster);
    roster_destroy();
}

void
cmd_roster_add_shows_message_when_no_jid(void** state)
{
    gchar* args[] = { "add", NULL };

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_string(cons_bad_cmd_usage, cmd, CMD_ROSTER);

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);
}

void
cmd_roster_add_sends_roster_add_request(void** state)
{
    char* jid = "bob@server.org";
    char* nick = "bob";
    gchar* args[] = { "add", jid, nick, NULL };

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_string(roster_send_add_new, barejid, jid);
    expect_string(roster_send_add_new, name, nick);

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);
}

void
cmd_roster_remove_shows_message_when_no_jid(void** state)
{
    gchar* args[] = { "remove", NULL };

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_string(cons_bad_cmd_usage, cmd, CMD_ROSTER);

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);
}

void
cmd_roster_remove_sends_roster_remove_request(void** state)
{
    char* jid = "bob@server.org";
    gchar* args[] = { "remove", jid, NULL };

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_string(roster_send_remove, barejid, jid);

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);
}

void
cmd_roster_nick_shows_message_when_no_jid(void** state)
{
    gchar* args[] = { "nick", NULL };

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_string(cons_bad_cmd_usage, cmd, CMD_ROSTER);

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);
}

void
cmd_roster_nick_shows_message_when_no_nick(void** state)
{
    gchar* args[] = { "nick", "bob@server.org", NULL };

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_string(cons_bad_cmd_usage, cmd, CMD_ROSTER);

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);
}

void
cmd_roster_nick_shows_message_when_no_contact_exists(void** state)
{
    gchar* args[] = { "nick", "bob@server.org", "bobster", NULL };

    roster_create();

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_cons_show("Contact not found in roster: bob@server.org");

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);

    roster_destroy();
}

void
cmd_roster_nick_sends_name_change_request(void** state)
{
    char* jid = "bob@server.org";
    char* nick = "bobster";
    gchar* args[] = { "nick", jid, nick, NULL };

    roster_create();
    GSList* groups = NULL;
    groups = g_slist_append(groups, strdup("group1"));
    roster_add(jid, "bob", groups, "both", FALSE);

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_string(roster_send_name_change, barejid, jid);
    expect_string(roster_send_name_change, new_name, nick);
    expect_memory(roster_send_name_change, groups, groups, sizeof(groups));

    expect_cons_show("Nickname for bob@server.org set to: bobster.");

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);

    PContact contact = roster_get_contact(jid);
    assert_string_equal(p_contact_name(contact), nick);

    roster_destroy();
}

void
cmd_roster_clearnick_shows_message_when_no_jid(void** state)
{
    gchar* args[] = { "clearnick", NULL };

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_string(cons_bad_cmd_usage, cmd, CMD_ROSTER);

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);
}

void
cmd_roster_clearnick_shows_message_when_no_contact_exists(void** state)
{
    gchar* args[] = { "clearnick", "bob@server.org", NULL };

    roster_create();

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_cons_show("Contact not found in roster: bob@server.org");

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);

    roster_destroy();
}

void
cmd_roster_clearnick_sends_name_change_request_with_empty_nick(void** state)
{
    char* jid = "bob@server.org";
    gchar* args[] = { "clearnick", jid, NULL };

    roster_create();
    GSList* groups = NULL;
    groups = g_slist_append(groups, strdup("group1"));
    roster_add(jid, "bob", groups, "both", FALSE);

    will_return(connection_get_status, JABBER_CONNECTED);

    expect_string(roster_send_name_change, barejid, jid);
    expect_value(roster_send_name_change, new_name, NULL);
    expect_memory(roster_send_name_change, groups, groups, sizeof(groups));

    expect_cons_show("Nickname for bob@server.org removed.");

    gboolean result = cmd_roster(NULL, CMD_ROSTER, args);
    assert_true(result);

    PContact contact = roster_get_contact(jid);
    assert_null(p_contact_name(contact));

    roster_destroy();
}