tests/invite.c \
tests/join.c \
tests/mode.c \
+ tests/nick.c \
tests/upgrade.c
expect(client, buffer);
}
+
+void
+expect_nickchange_to(struct PlexusClient *client, struct Client *from, const char *to)
+{
+ char buffer[IRCD_BUFSIZE];
+
+ snprintf(buffer, sizeof(buffer), ":%s!%s@%s NICK :%s", from->name, from->username, from->host, to);
+
+ expect(client, buffer);
+}
+
+void
+expect_nickchange_from(struct PlexusClient *client, struct Client *to, const char *from)
+{
+ char buffer[IRCD_BUFSIZE];
+
+ snprintf(buffer, sizeof(buffer), ":%s!%s@%s NICK :%s", from, to->username, to->host, to->name);
+
+ expect(client, buffer);
+}
{
io_write(client, "PRIVMSG %s :%s", target, message);
}
+
+void
+irc_nick(struct PlexusClient *client, const char *newnick)
+{
+ io_write(client, "NICK %s", newnick);
+}
extern void expect(struct PlexusClient *client, const char *str);
extern void expect_numeric(struct PlexusClient *client, enum irc_numerics numeric);
extern void expect_message(struct PlexusClient *client, struct Client *from, const char *message);
+extern void expect_nickchange_to(struct PlexusClient *client, struct Client *from, const char *to);
+extern void expect_nickchange_from(struct PlexusClient *client, struct Client *to, const char *from);
extern void irc_client_set_cmode(struct PlexusClient *client, struct Channel *chptr, const char *modes);
extern void irc_client_set_umode(struct PlexusClient *client, const char *modes);
extern void irc_join_key(struct PlexusClient *client, const char *channel, const char *key);
extern void irc_part(struct PlexusClient *client, const char *channel);
extern void irc_privmsg(struct PlexusClient *client, const char *target, const char *message);
+extern void irc_nick(struct PlexusClient *client, const char *newnick);
extern void plexus_fork(void (*callback)());
extern bool plexus_branch(void);
extern void mode_setup(Suite *);
extern void upgrade_setup(Suite *);
extern void dnsbl_setup(Suite *);
+extern void nick_setup(Suite *s);
mode_setup(s);
upgrade_setup(s);
dnsbl_setup(s);
+ nick_setup(s);
}
int
--- /dev/null
+#include "plexus_test.h"
+
+START_TEST(nick)
+{
+ plexus_up();
+
+ struct PlexusClient *client1 = client_register("test1"),
+ *client2 = client_register("test2");
+
+ irc_nick(client1, "test3");
+ expect_nickchange_to(client1, client1->client, "test3");
+ strlcpy(client1->name, "test3", sizeof(client1->name));
+ ck_assert_str_eq(client1->client->name, "test3");
+
+ irc_join(client1, "#a");
+ expect_message(client1, client1->client, "JOIN");
+
+ irc_join(client2, "#a");
+ expect_message(client2, client2->client, "JOIN");
+
+ struct Channel *chptr = hash_find_channel("#a");
+ ck_assert_ptr_ne(chptr, NULL);
+
+ irc_nick(client1, "test4");
+ expect_nickchange_to(client1, client1->client, "test4");
+ strlcpy(client1->name, "test4", sizeof(client1->name));
+ ck_assert_str_eq(client1->client->name, "test4");
+
+ expect_nickchange_from(client2, client1->client, "test3");
+}
+END_TEST
+
+void
+nick_setup(Suite *s)
+{
+ TCase *tc = tcase_create("nick");
+
+ tcase_add_checked_fixture(tc, NULL, plexus_down);
+ tcase_add_test(tc, nick);
+
+ suite_add_tcase(s, tc);
+}