]> jfr.im git - irc/rizon/plexus4.git/commitdiff
Add nick test
authorAdam <redacted>
Fri, 17 Jun 2016 19:21:35 +0000 (15:21 -0400)
committerAdam <redacted>
Fri, 17 Jun 2016 19:21:35 +0000 (15:21 -0400)
test/Makefile.am
test/expect.c
test/irc.c
test/plexus_test.h
test/test.c
test/tests/nick.c [new file with mode: 0644]

index a85f3289a2a6368a02074e0e25433c424441f1b7..e9a509f406bb039f2490edb46d94eaa0964385f7 100644 (file)
@@ -20,4 +20,5 @@ check_plexus_SOURCES = \
        tests/invite.c \
        tests/join.c \
        tests/mode.c \
+       tests/nick.c \
        tests/upgrade.c
index b1d43d947cf5f6459e5df09dcb54300a1586daf6..325f25b418ec16631dd39f206e3d7d89468abf4e 100644 (file)
@@ -46,3 +46,23 @@ expect_message(struct PlexusClient *client, struct Client *from, const char *mes
 
   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);
+}
index 495bd6df5aee25ad9ec681a7b4cd7d123047109b..43051cc35929acbec69016612815c736bc1b23d7 100644 (file)
@@ -41,3 +41,9 @@ irc_privmsg(struct PlexusClient *client, const char *target, const char *message
 {
   io_write(client, "PRIVMSG %s :%s", target, message);
 }
+
+void
+irc_nick(struct PlexusClient *client, const char *newnick)
+{
+  io_write(client, "NICK %s", newnick);
+}
index ecdc300ebafa5eb48bd24ea90d39d50e1857f494..5d1f5cbe3cb43ec0293609d1856a9a5fcdfa0203 100644 (file)
@@ -44,6 +44,8 @@ extern struct PlexusClient *client_register_host(const char *, const char *);
 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);
@@ -52,6 +54,7 @@ extern void irc_join(struct PlexusClient *client, const char *channel);
 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);
@@ -62,3 +65,4 @@ extern void join_setup(Suite *);
 extern void mode_setup(Suite *);
 extern void upgrade_setup(Suite *);
 extern void dnsbl_setup(Suite *);
+extern void nick_setup(Suite *s);
index 6bd9c3dd545c9649cbf006cdfca0d2d0eb2fd180..1b77b86e4e1d44e7b87878024f560337e9de749c 100644 (file)
@@ -15,6 +15,7 @@ add_testcases(Suite *s)
   mode_setup(s);
   upgrade_setup(s);
   dnsbl_setup(s);
+  nick_setup(s);
 }
 
 int
diff --git a/test/tests/nick.c b/test/tests/nick.c
new file mode 100644 (file)
index 0000000..58d4f2e
--- /dev/null
@@ -0,0 +1,42 @@
+#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);
+}