--- a/src/test.c Thu Mar 26 23:15:55 2009 +0200
+++ b/src/test.c Thu Mar 26 23:29:06 2009 +0200
@@ -387,13 +387,14 @@
line_proto_release(lp);
}
-struct _test_irc_conn_ctx {
+struct test_conn_ctx {
+ /** Callback flags */
bool on_registered, on_TEST, on_error, on_quit;
};
static void _conn_on_registered (struct irc_conn *conn, void *arg)
{
- struct _test_irc_conn_ctx *ctx = arg;
+ struct test_conn_ctx *ctx = arg;
(void) conn;
@@ -404,7 +405,7 @@
static void _conn_on_error (struct irc_conn *conn, struct error_info *err, void *arg)
{
- struct _test_irc_conn_ctx *ctx = arg;
+ struct test_conn_ctx *ctx = arg;
(void) conn;
(void) err;
@@ -416,7 +417,7 @@
static void _conn_on_quit (struct irc_conn *conn, void *arg)
{
- struct _test_irc_conn_ctx *ctx = arg;
+ struct test_conn_ctx *ctx = arg;
(void) conn;
@@ -427,7 +428,7 @@
static void _conn_on_TEST (const struct irc_line *line, void *arg)
{
- struct _test_irc_conn_ctx *ctx = arg;
+ struct test_conn_ctx *ctx = arg;
assert_null(line->source);
assert_strcmp(line->command, "TEST");
@@ -450,7 +451,10 @@
{ NULL, NULL }
};
-struct irc_conn* setup_irc_conn (struct sock_test *sock, bool noisy, struct _test_irc_conn_ctx *ctx)
+/**
+ * Create and return a new irc_conn with the given ctx (will be initialized to zero).
+ */
+struct irc_conn* setup_irc_conn (struct sock_test *sock, bool noisy, struct test_conn_ctx *ctx)
{
struct irc_conn *conn;
struct error_info err;
@@ -458,6 +462,9 @@
"nick", "user", "realname"
};
+ // init the ctx
+ memset(ctx, 0, sizeof(*ctx));
+
// create the irc_conn
assert_success(irc_conn_create(&conn, SOCK_TEST_BASE(sock), &_conn_callbacks, ctx, &err));
@@ -478,16 +485,10 @@
void test_irc_conn (void)
{
- struct sock_test *sock;
- struct irc_conn *conn;
- struct _test_irc_conn_ctx ctx = { false, false, false, false };
+ struct test_conn_ctx ctx;
+ struct sock_test *sock = setup_sock_test();
+ struct irc_conn *conn = setup_irc_conn(sock, true, &ctx);
- // create the test socket
- assert((sock = sock_test_create()));
-
- // setup the basic irc_conn
- conn = setup_irc_conn(sock, true, &ctx);
-
// add our test handlers
assert_success(irc_conn_add_cmd_handlers(conn, _conn_handlers, &ctx));
@@ -518,6 +519,20 @@
irc_conn_destroy(conn);
}
+void test_irc_conn_self_nick (void)
+{
+ struct test_conn_ctx ctx;
+ struct sock_test *sock = setup_sock_test();
+ struct irc_conn *conn = setup_irc_conn(sock, false, &ctx);
+
+ log_info("test irc_conn_on_NICK");
+ test_sock_push(sock, ":mynick!user@somehost NICK mynick2\r\n");
+ assert_strcmp(conn->nickname, "mynick2");
+
+ // cleanup
+ irc_conn_destroy(conn);
+}
+
struct test_chan_ctx {
/** The channel we're supposed to be testing */
struct irc_chan *chan;
@@ -845,7 +860,7 @@
{ "line_proto", &test_line_proto },
// XXX: irc_line_parse_invalid_prefix
{ "irc_conn", &test_irc_conn },
- // XXX: irc_conn_self_nick
+ { "irc_conn_self_nick", &test_irc_conn_self_nick },
{ "irc_net", &test_irc_net },
{ "irc_chan_add_offline", &test_irc_chan_add_offline },
{ "irc_chan_namreply", &test_irc_chan_namreply },
@@ -864,7 +879,6 @@
/** Options without short names */
_OPT_EXT_BEGIN = 0x00ff,
-
};
/**