mirror of
https://github.com/weechat/weechat.git
synced 2026-06-12 14:14:48 +02:00
860 lines
28 KiB
C++
860 lines
28 KiB
C++
/*
|
|
* SPDX-FileCopyrightText: 2024-2025 Sébastien Helleu <flashcode@flashtux.org>
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*
|
|
* This file is part of WeeChat, the extensible chat client.
|
|
*
|
|
* WeeChat is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* WeeChat is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with WeeChat. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/* Test IRC info functions */
|
|
|
|
#include "CppUTest/TestHarness.h"
|
|
|
|
#include "tests.h"
|
|
|
|
extern "C"
|
|
{
|
|
#include "string.h"
|
|
#include "src/core/core-hashtable.h"
|
|
#include "src/core/core-hook.h"
|
|
#include "src/core/core-infolist.h"
|
|
#include "src/gui/gui-buffer.h"
|
|
#include "src/gui/gui-color.h"
|
|
#include "src/plugins/plugin.h"
|
|
#include "src/plugins/irc/irc-channel.h"
|
|
#include "src/plugins/irc/irc-ignore.h"
|
|
#include "src/plugins/irc/irc-info.h"
|
|
#include "src/plugins/irc/irc-nick.h"
|
|
#include "src/plugins/irc/irc-notify.h"
|
|
#include "src/plugins/irc/irc-server.h"
|
|
|
|
extern void irc_info_create_string_with_pointer (char **string, void *pointer);
|
|
}
|
|
|
|
TEST_GROUP(IrcInfo)
|
|
{
|
|
};
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_create_string_with_pointer
|
|
*/
|
|
|
|
TEST(IrcInfo, CreateStringWithPointer)
|
|
{
|
|
char *str;
|
|
|
|
str = NULL;
|
|
irc_info_create_string_with_pointer (&str, NULL);
|
|
STRCMP_EQUAL(NULL, str);
|
|
|
|
str = strdup ("test");
|
|
irc_info_create_string_with_pointer (&str, (void *)0x1234abcd);
|
|
STRCMP_EQUAL("0x1234abcd", str);
|
|
free (str);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_irc_is_channel_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoIrcIsChannelCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
char *str;
|
|
|
|
server = irc_server_alloc ("server");
|
|
CHECK(server);
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_channel", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_channel", ""));
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_channel", "test"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_is_channel", "#test"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_is_channel", "&test"));
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_channel", "server,test"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_is_channel", "server,#test"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_is_channel", "server,&test"));
|
|
|
|
if (server->chantypes)
|
|
free (server->chantypes);
|
|
server->chantypes = strdup ("&");
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_channel", "server,test"));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_channel", "server,#test"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_is_channel", "server,&test"));
|
|
|
|
irc_server_free (server);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_irc_is_nick_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoIrcIsNickCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
char *str;
|
|
|
|
server = irc_server_alloc ("server");
|
|
CHECK(server);
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_nick", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_nick", ""));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_nick", "#test"));
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_nick", "&test"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_is_nick", "test"));
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_nick", "server,#test"));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_nick", "server,&test"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_is_nick", "server,test"));
|
|
|
|
if (server->chantypes)
|
|
free (server->chantypes);
|
|
server->chantypes = strdup ("&");
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_nick", "server,#test"));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_nick", "server,&test"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_is_nick", "server,test"));
|
|
|
|
irc_server_free (server);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_irc_nick_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoIrcNickCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
char *str;
|
|
|
|
server = irc_server_alloc ("server");
|
|
CHECK(server);
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_nick", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_nick", ""));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_nick", "test"));
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_nick", "server"));
|
|
|
|
if (server->nick)
|
|
free (server->nick);
|
|
server->nick = strdup ("alice");
|
|
|
|
WEE_TEST_STR("alice", hook_info_get (NULL, "irc_nick", "server"));
|
|
|
|
irc_server_free (server);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_irc_nick_from_host_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoIrcNickFromHostCb)
|
|
{
|
|
char *str;
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_nick_from_host", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_nick_from_host", ""));
|
|
|
|
WEE_TEST_STR("user", hook_info_get (NULL, "irc_nick_from_host", "user"));
|
|
WEE_TEST_STR("user", hook_info_get (NULL, "irc_nick_from_host", "user "));
|
|
WEE_TEST_STR("user", hook_info_get (NULL, "irc_nick_from_host", ":user "));
|
|
WEE_TEST_STR("user", hook_info_get (NULL, "irc_nick_from_host", ":user!host"));
|
|
WEE_TEST_STR("user", hook_info_get (NULL, "irc_nick_from_host", ":user!host"));
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_irc_nick_color_cb
|
|
* irc_info_info_irc_nick_color_name_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoIrcNickColorCb)
|
|
{
|
|
char *str, str_color[64];
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_nick_color", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_nick_color", ""));
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_nick_color_name", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_nick_color_name", ""));
|
|
|
|
snprintf (str_color, sizeof (str_color), "%s", gui_color_get_custom ("186"));
|
|
WEE_TEST_STR(str_color, hook_info_get (NULL, "irc_nick_color", "Nick"));
|
|
WEE_TEST_STR("186", hook_info_get (NULL, "irc_nick_color_name", "Nick"));
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_irc_buffer_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoIrcBufferCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
struct t_irc_channel *channel, *channel_pv;
|
|
struct t_irc_nick *nick;
|
|
char *str, str_pointer[64];
|
|
|
|
run_cmd_quiet ("/mute /server add local fake:127.0.0.1");
|
|
run_cmd_quiet ("/connect local");
|
|
|
|
server = irc_server_search ("local");
|
|
CHECK(server);
|
|
|
|
channel = irc_channel_new (server, IRC_CHANNEL_TYPE_CHANNEL, "#test", 0, 0);
|
|
CHECK(channel);
|
|
|
|
nick = irc_nick_new (server, channel, "bob", "user@host", "@", 0, NULL, NULL);
|
|
CHECK(nick);
|
|
|
|
channel_pv = irc_channel_new (server, IRC_CHANNEL_TYPE_PRIVATE, "bob", 1, 0);
|
|
CHECK(channel_pv);
|
|
|
|
STRCMP_EQUAL(NULL, hook_info_get (NULL, "irc_buffer", NULL));
|
|
STRCMP_EQUAL(NULL, hook_info_get (NULL, "irc_buffer", ""));
|
|
STRCMP_EQUAL(NULL, hook_info_get (NULL, "irc_buffer", "xxx"));
|
|
|
|
snprintf (str_pointer, sizeof (str_pointer), "%p", server->buffer);
|
|
WEE_TEST_STR(str_pointer, hook_info_get (NULL, "irc_buffer", "local"));
|
|
|
|
snprintf (str_pointer, sizeof (str_pointer), "%p", channel->buffer);
|
|
WEE_TEST_STR(str_pointer, hook_info_get (NULL, "irc_buffer", "local,#test"));
|
|
|
|
STRCMP_EQUAL(NULL, hook_info_get (NULL, "irc_buffer", "local,#xxx"));
|
|
|
|
snprintf (str_pointer, sizeof (str_pointer), "%p", channel->buffer);
|
|
WEE_TEST_STR(str_pointer, hook_info_get (NULL, "irc_buffer", "local,#test,bob"));
|
|
|
|
irc_nick_free (server, channel, nick);
|
|
if (channel_pv->buffer)
|
|
gui_buffer_close (channel_pv->buffer);
|
|
if (channel->buffer)
|
|
gui_buffer_close (channel->buffer);
|
|
|
|
run_cmd_quiet ("/mute /disconnect local");
|
|
run_cmd_quiet ("/mute /server del local");
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_irc_server_isupport_cb
|
|
* irc_info_info_irc_server_isupport_value_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoIrcServerIsupportCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
char *str;
|
|
|
|
server = irc_server_alloc ("server");
|
|
CHECK(server);
|
|
|
|
if (server->isupport)
|
|
free (server->isupport);
|
|
server->isupport = strdup (
|
|
"BOT=B CALLERID CASEMAPPING=ascii DEAF=D KICKLEN=180 MODES=6 EXCEPTS "
|
|
"INVEX NICKLEN=15 NETWORK=debian MAXLIST=beI:100 MAXTARGETS=4 "
|
|
"CHANTYPES=#");
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_isupport", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_isupport", ""));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_isupport", "server"));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_isupport", "server,XXX"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_server_isupport", "server,NETWORK"));
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_isupport_value", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_isupport_value", ""));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_isupport_value", "server"));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_isupport_value", "server,XXX"));
|
|
WEE_TEST_STR("debian", hook_info_get (NULL, "irc_server_isupport_value", "server,NETWORK"));
|
|
|
|
irc_server_free (server);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_irc_server_cap_cb
|
|
* irc_info_info_irc_server_cap_value_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoIrcServerCapCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
char *str;
|
|
|
|
server = irc_server_alloc ("server");
|
|
CHECK(server);
|
|
|
|
hashtable_set (server->cap_list, "test_cap", "test_value");
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_cap", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_cap", ""));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_cap", "server"));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_cap", "server,xxx"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_server_cap", "server,test_cap"));
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_cap_value", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_cap_value", ""));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_cap_value", "server"));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_server_cap_value", "server,xxx"));
|
|
WEE_TEST_STR("test_value", hook_info_get (NULL, "irc_server_cap_value", "server,test_cap"));
|
|
|
|
irc_server_free (server);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_irc_is_message_ignored_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoIrcIsMessageIgnoredCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
struct t_irc_ignore *ignore;
|
|
char *str;
|
|
|
|
server = irc_server_alloc ("server");
|
|
CHECK(server);
|
|
|
|
ignore = irc_ignore_new ("bob", "server", NULL);
|
|
CHECK(ignore);
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_message_ignored", NULL));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_message_ignored", ""));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_message_ignored", "xxx"));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_message_ignored",
|
|
"xxx,:alice!user@host PRIVMSG #channel :test"));
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_message_ignored", "server"));
|
|
|
|
WEE_TEST_STR(NULL, hook_info_get (NULL, "irc_is_message_ignored",
|
|
"server,:alice!user@host PRIVMSG #channel :test"));
|
|
WEE_TEST_STR("1", hook_info_get (NULL, "irc_is_message_ignored",
|
|
"server,:bob!user@host PRIVMSG #channel :test"));
|
|
|
|
irc_ignore_free (ignore);
|
|
irc_server_free (server);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_hashtable_irc_message_parse_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoHashtableIrcMessageParseCb)
|
|
{
|
|
struct t_hashtable *hashtable, *result;
|
|
|
|
hashtable = hashtable_new (32,
|
|
WEECHAT_HASHTABLE_STRING,
|
|
WEECHAT_HASHTABLE_STRING,
|
|
NULL, NULL);
|
|
CHECK(hashtable);
|
|
|
|
POINTERS_EQUAL(NULL, hook_info_get_hashtable (NULL, "irc_message_parse", NULL));
|
|
POINTERS_EQUAL(NULL, hook_info_get_hashtable (NULL, "irc_message_parse", hashtable));
|
|
|
|
hashtable_set (hashtable, "message",
|
|
"@tag1=value1 :alice!user@host PRIVMSG #channel :this is a test");
|
|
|
|
result = hook_info_get_hashtable (NULL, "irc_message_parse", hashtable);
|
|
CHECK(result);
|
|
STRCMP_EQUAL("tag1=value1", (const char *)hashtable_get (result, "tags"));
|
|
STRCMP_EQUAL("alice", (const char *)hashtable_get (result, "nick"));
|
|
STRCMP_EQUAL("user", (const char *)hashtable_get (result, "user"));
|
|
STRCMP_EQUAL("alice!user@host", (const char *)hashtable_get (result, "host"));
|
|
STRCMP_EQUAL("PRIVMSG", (const char *)hashtable_get (result, "command"));
|
|
STRCMP_EQUAL("#channel", (const char *)hashtable_get (result, "channel"));
|
|
STRCMP_EQUAL("#channel :this is a test", (const char *)hashtable_get (result, "arguments"));
|
|
STRCMP_EQUAL("this is a test", (const char *)hashtable_get (result, "text"));
|
|
STRCMP_EQUAL("2", (const char *)hashtable_get (result, "num_params"));
|
|
STRCMP_EQUAL("#channel", (const char *)hashtable_get (result, "param1"));
|
|
STRCMP_EQUAL("this is a test", (const char *)hashtable_get (result, "param2"));
|
|
STRCMP_EQUAL("30", (const char *)hashtable_get (result, "pos_command"));
|
|
STRCMP_EQUAL("38", (const char *)hashtable_get (result, "pos_arguments"));
|
|
STRCMP_EQUAL("38", (const char *)hashtable_get (result, "pos_channel"));
|
|
STRCMP_EQUAL("48", (const char *)hashtable_get (result, "pos_text"));
|
|
hashtable_free (result);
|
|
|
|
hashtable_free (hashtable);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_info_hashtable_irc_message_split_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfoHashtableIrcMessageSplitCb)
|
|
{
|
|
struct t_hashtable *hashtable, *result;
|
|
|
|
hashtable = hashtable_new (32,
|
|
WEECHAT_HASHTABLE_STRING,
|
|
WEECHAT_HASHTABLE_STRING,
|
|
NULL, NULL);
|
|
CHECK(hashtable);
|
|
|
|
POINTERS_EQUAL(NULL, hook_info_get_hashtable (NULL, "irc_message_split", NULL));
|
|
POINTERS_EQUAL(NULL, hook_info_get_hashtable (NULL, "irc_message_split", hashtable));
|
|
|
|
hashtable_set (hashtable, "message",
|
|
"@tag1=value1 :alice!user@host PRIVMSG #channel :this is a test");
|
|
|
|
result = hook_info_get_hashtable (NULL, "irc_message_split", hashtable);
|
|
CHECK(result);
|
|
STRCMP_EQUAL("@tag1=value1 :alice!user@host PRIVMSG #channel :this is a test",
|
|
(const char *)hashtable_get (result, "msg1"));
|
|
STRCMP_EQUAL("this is a test", (const char *)hashtable_get (result, "args1"));
|
|
hashtable_free (result);
|
|
|
|
hashtable_free (hashtable);
|
|
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_infolist_irc_server_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfolistIrcServerCb)
|
|
{
|
|
struct t_irc_server *server1, *server2;
|
|
struct t_infolist *infolist;
|
|
|
|
server1 = irc_server_alloc ("server1");
|
|
CHECK(server1);
|
|
|
|
server2 = irc_server_alloc ("server2");
|
|
CHECK(server2);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_server", NULL, NULL);
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("server1", infolist_string (infolist, "name"));
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("server2", infolist_string (infolist, "name"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_server", server2, NULL);
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("server2", infolist_string (infolist, "name"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
irc_server_free (server2);
|
|
irc_server_free (server1);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_infolist_irc_channel_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfolistIrcChannelCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
struct t_irc_channel *channel1, *channel2;
|
|
struct t_infolist *infolist;
|
|
|
|
server = irc_server_alloc ("server");
|
|
CHECK(server);
|
|
|
|
channel1 = irc_channel_new (server, IRC_CHANNEL_TYPE_CHANNEL, "#test1", 0, 0);
|
|
CHECK(channel1);
|
|
|
|
channel2 = irc_channel_new (server, IRC_CHANNEL_TYPE_CHANNEL, "#test2", 0, 0);
|
|
CHECK(channel2);
|
|
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_channel", NULL, NULL));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_channel", NULL, ""));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_channel", NULL, "xxx"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_channel", NULL, "xxx,yyy"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_channel", NULL, "server,xxx"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_channel", (void *)0x1, "server"));
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_channel", NULL, "server");
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("#test1", infolist_string (infolist, "name"));
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("#test2", infolist_string (infolist, "name"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_channel", NULL, "server,#test2");
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("#test2", infolist_string (infolist, "name"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
if (channel2->buffer)
|
|
gui_buffer_close (channel2->buffer);
|
|
if (channel1->buffer)
|
|
gui_buffer_close (channel1->buffer);
|
|
irc_server_free (server);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_infolist_irc_modelist_cb
|
|
* irc_info_infolist_irc_modelist_item_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfolistIrcModelistCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
struct t_irc_channel *channel;
|
|
struct t_infolist *infolist;
|
|
|
|
server = irc_server_alloc ("server");
|
|
CHECK(server);
|
|
|
|
if (server->chanmodes)
|
|
free (server->chanmodes);
|
|
server->chanmodes = strdup ("Ibe,k");
|
|
|
|
channel = irc_channel_new (server, IRC_CHANNEL_TYPE_CHANNEL, "#test", 0, 0);
|
|
CHECK(channel);
|
|
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist", NULL, NULL));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist", NULL, ""));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist", NULL, "xxx"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist", NULL, "server"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist", NULL, "xxx,yyy"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist", NULL, "server,xxx"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist", (void *)0x1, "server,#test"));
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_modelist", NULL, "server,#test");
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("I", infolist_string (infolist, "type"));
|
|
LONGS_EQUAL(0, infolist_integer (infolist, "state"));
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("b", infolist_string (infolist, "type"));
|
|
LONGS_EQUAL(0, infolist_integer (infolist, "state"));
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("e", infolist_string (infolist, "type"));
|
|
LONGS_EQUAL(0, infolist_integer (infolist, "state"));
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("k", infolist_string (infolist, "type"));
|
|
LONGS_EQUAL(0, infolist_integer (infolist, "state"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_modelist", NULL, "server,#test,k");
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("k", infolist_string (infolist, "type"));
|
|
LONGS_EQUAL(0, infolist_integer (infolist, "state"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist_item", NULL, NULL));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist_item", NULL, ""));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist_item", NULL, "xxx"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist_item", NULL, "server"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist_item", NULL, "server,xxx"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist_item", NULL, "server,#test"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_modelist_item", NULL, "server,#test,Z"));
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_modelist_item", NULL, "server,#test,I");
|
|
CHECK(infolist);
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
if (channel->buffer)
|
|
gui_buffer_close (channel->buffer);
|
|
irc_server_free (server);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_infolist_irc_nick_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfolistIrcNickCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
struct t_irc_channel *channel;
|
|
struct t_irc_nick *nick;
|
|
struct t_infolist *infolist;
|
|
|
|
server = irc_server_alloc ("server");
|
|
CHECK(server);
|
|
|
|
channel = irc_channel_new (server, IRC_CHANNEL_TYPE_CHANNEL, "#test", 0, 0);
|
|
CHECK(channel);
|
|
|
|
nick = irc_nick_new (server, channel, "alice", "user@host", "@", 1, /* away */
|
|
"account-alice", "realname-alice");
|
|
CHECK(nick);
|
|
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_nick", NULL, NULL));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_nick", NULL, ""));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_nick", NULL, "xxx"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_nick", NULL, "server"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_nick", NULL, "server,#xxx"));
|
|
POINTERS_EQUAL(NULL, hook_infolist_get (NULL, "irc_nick", NULL, "xxx,#test"));
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_nick", NULL, "server,#test");
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("alice", infolist_string (infolist, "name"));
|
|
STRCMP_EQUAL("user@host", infolist_string (infolist, "host"));
|
|
STRCMP_EQUAL("@ ", infolist_string (infolist, "prefixes"));
|
|
LONGS_EQUAL(1, infolist_integer (infolist, "away"));
|
|
STRCMP_EQUAL("account-alice", infolist_string (infolist, "account"));
|
|
STRCMP_EQUAL("realname-alice", infolist_string (infolist, "realname"));
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_nick", NULL, "server,#test,alice");
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("alice", infolist_string (infolist, "name"));
|
|
STRCMP_EQUAL("user@host", infolist_string (infolist, "host"));
|
|
STRCMP_EQUAL("@ ", infolist_string (infolist, "prefixes"));
|
|
LONGS_EQUAL(1, infolist_integer (infolist, "away"));
|
|
STRCMP_EQUAL("account-alice", infolist_string (infolist, "account"));
|
|
STRCMP_EQUAL("realname-alice", infolist_string (infolist, "realname"));
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
irc_nick_free (server, channel, nick);
|
|
if (channel->buffer)
|
|
gui_buffer_close (channel->buffer);
|
|
irc_server_free (server);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_infolist_irc_ignore_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfolistIrcIgnoreCb)
|
|
{
|
|
struct t_irc_ignore *ignore1, *ignore2;
|
|
struct t_infolist *infolist;
|
|
|
|
ignore1 = irc_ignore_new ("alice", "server", NULL);
|
|
CHECK(ignore1);
|
|
|
|
ignore2 = irc_ignore_new ("bob", "server", NULL);
|
|
CHECK(ignore2);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_ignore", NULL, NULL);
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("alice", infolist_string (infolist, "mask"));
|
|
STRCMP_EQUAL("server", infolist_string (infolist, "server"));
|
|
STRCMP_EQUAL("*", infolist_string (infolist, "channel"));
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("bob", infolist_string (infolist, "mask"));
|
|
STRCMP_EQUAL("server", infolist_string (infolist, "server"));
|
|
STRCMP_EQUAL("*", infolist_string (infolist, "channel"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_ignore", ignore2, NULL);
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("bob", infolist_string (infolist, "mask"));
|
|
STRCMP_EQUAL("server", infolist_string (infolist, "server"));
|
|
STRCMP_EQUAL("*", infolist_string (infolist, "channel"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
irc_ignore_free (ignore2);
|
|
irc_ignore_free (ignore1);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_infolist_irc_notify_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfolistIrcNotifyCb)
|
|
{
|
|
struct t_irc_server *server;
|
|
struct t_irc_notify *notify1, *notify2;
|
|
struct t_infolist *infolist;
|
|
|
|
server = irc_server_alloc ("server");
|
|
CHECK(server);
|
|
|
|
notify1 = irc_notify_new (server, "bob", 1);
|
|
CHECK(notify1);
|
|
|
|
notify2 = irc_notify_new (server, "carol", 1);
|
|
CHECK(notify2);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_notify", NULL, NULL);
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
POINTERS_EQUAL(server, infolist_pointer (infolist, "server"));
|
|
STRCMP_EQUAL("server", infolist_string (infolist, "server_name"));
|
|
STRCMP_EQUAL("bob", infolist_string (infolist, "nick"));
|
|
LONGS_EQUAL(1, infolist_integer (infolist, "check_away"));
|
|
LONGS_EQUAL(-1, infolist_integer (infolist, "is_on_server"));
|
|
STRCMP_EQUAL(NULL, infolist_string (infolist, "away_message"));
|
|
|
|
CHECK(infolist_next (infolist));
|
|
POINTERS_EQUAL(server, infolist_pointer (infolist, "server"));
|
|
STRCMP_EQUAL("server", infolist_string (infolist, "server_name"));
|
|
STRCMP_EQUAL("carol", infolist_string (infolist, "nick"));
|
|
LONGS_EQUAL(1, infolist_integer (infolist, "check_away"));
|
|
LONGS_EQUAL(-1, infolist_integer (infolist, "is_on_server"));
|
|
STRCMP_EQUAL(NULL, infolist_string (infolist, "away_message"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_notify", NULL, "serv*");
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
POINTERS_EQUAL(server, infolist_pointer (infolist, "server"));
|
|
STRCMP_EQUAL("server", infolist_string (infolist, "server_name"));
|
|
STRCMP_EQUAL("bob", infolist_string (infolist, "nick"));
|
|
LONGS_EQUAL(1, infolist_integer (infolist, "check_away"));
|
|
LONGS_EQUAL(-1, infolist_integer (infolist, "is_on_server"));
|
|
STRCMP_EQUAL(NULL, infolist_string (infolist, "away_message"));
|
|
|
|
CHECK(infolist_next (infolist));
|
|
POINTERS_EQUAL(server, infolist_pointer (infolist, "server"));
|
|
STRCMP_EQUAL("server", infolist_string (infolist, "server_name"));
|
|
STRCMP_EQUAL("carol", infolist_string (infolist, "nick"));
|
|
LONGS_EQUAL(1, infolist_integer (infolist, "check_away"));
|
|
LONGS_EQUAL(-1, infolist_integer (infolist, "is_on_server"));
|
|
STRCMP_EQUAL(NULL, infolist_string (infolist, "away_message"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_notify", NULL, "xxx*");
|
|
CHECK(infolist);
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_notify", notify2, NULL);
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
POINTERS_EQUAL(server, infolist_pointer (infolist, "server"));
|
|
STRCMP_EQUAL("server", infolist_string (infolist, "server_name"));
|
|
STRCMP_EQUAL("carol", infolist_string (infolist, "nick"));
|
|
LONGS_EQUAL(1, infolist_integer (infolist, "check_away"));
|
|
LONGS_EQUAL(-1, infolist_integer (infolist, "is_on_server"));
|
|
STRCMP_EQUAL(NULL, infolist_string (infolist, "away_message"));
|
|
|
|
POINTERS_EQUAL(NULL, infolist_next (infolist));
|
|
|
|
infolist_free (infolist);
|
|
|
|
irc_notify_free (server, notify2, 1);
|
|
irc_notify_free (server, notify1, 1);
|
|
irc_server_free (server);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_infolist_irc_color_weechat_cb
|
|
*/
|
|
|
|
TEST(IrcInfo, InfolistIrcColorWeechatCb)
|
|
{
|
|
struct t_infolist *infolist;
|
|
|
|
infolist = hook_infolist_get (NULL, "irc_color_weechat", NULL, NULL);
|
|
CHECK(infolist);
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("00", infolist_string (infolist, "color_irc"));
|
|
STRCMP_EQUAL("white", infolist_string (infolist, "color_weechat"));
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("01", infolist_string (infolist, "color_irc"));
|
|
STRCMP_EQUAL("black", infolist_string (infolist, "color_weechat"));
|
|
|
|
CHECK(infolist_next (infolist));
|
|
STRCMP_EQUAL("02", infolist_string (infolist, "color_irc"));
|
|
STRCMP_EQUAL("blue", infolist_string (infolist, "color_weechat"));
|
|
|
|
infolist_free (infolist);
|
|
}
|
|
|
|
/*
|
|
* Tests functions:
|
|
* irc_info_init
|
|
*/
|
|
|
|
TEST(IrcInfo, Init)
|
|
{
|
|
/* TODO: write tests */
|
|
}
|