aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nick.c4
-rw-r--r--tests/Makefile4
-rw-r--r--tests/check.c15
-rw-r--r--tests/check_nick.c70
-rw-r--r--tests/check_util.c19
5 files changed, 109 insertions, 3 deletions
diff --git a/nick.c b/nick.c
index 771d2288..68dd9802 100644
--- a/nick.c
+++ b/nick.c
@@ -162,7 +162,7 @@ void nick_strip( char * nick )
{
int i, j;
- for( i = j = 0; nick[i] && i < MAX_NICK_LENGTH; i++ )
+ for( i = j = 0; nick[i] && j < MAX_NICK_LENGTH; i++ )
{
if( strchr( nick_lc_chars, nick[i] ) ||
strchr( nick_uc_chars, nick[i] ) )
@@ -171,7 +171,7 @@ void nick_strip( char * nick )
j++;
}
}
- while( j < MAX_NICK_LENGTH )
+ while( j <= MAX_NICK_LENGTH )
nick[j++] = '\0';
}
diff --git a/tests/Makefile b/tests/Makefile
index 3a27a430..ce8ed690 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -5,7 +5,9 @@ LFLAGS +=-lcheck
all: check
./check
-check: check.o check_util.o ../util.o
+main_objs = account.o bitlbee.o conf.o crypting.o help.o ini.o ipc.o irc.o irc_commands.o log.o nick.o query.o root_commands.o set.o storage.o storage_text.o url.o user.o util.o
+
+check: check.o check_util.o check_nick.o $(addprefix ../, $(main_objs)) ../protocols/protocols.o
@echo '*' Linking $@
@$(CC) $(CFLAGS) -o $@ $^ $(LFLAGS) $(EFLAGS)
diff --git a/tests/check.c b/tests/check.c
index 999da16a..5cfb7dfd 100644
--- a/tests/check.c
+++ b/tests/check.c
@@ -2,14 +2,29 @@
#include <glib.h>
#include <gmodule.h>
#include <check.h>
+#include "bitlbee.h"
+
+global_t global; /* Against global namespace pollution */
+
+double gettime()
+{
+ struct timeval time[1];
+
+ gettimeofday( time, 0 );
+ return( (double) time->tv_sec + (double) time->tv_usec / 1000000 );
+}
/* From check_util.c */
Suite *util_suite(void);
+/* From check_nick.c */
+Suite *nick_suite(void);
+
int main (void)
{
int nf;
SRunner *sr = srunner_create(util_suite());
+ srunner_add_suite(sr, nick_suite());
srunner_run_all (sr, CK_NORMAL);
nf = srunner_ntests_failed(sr);
srunner_free(sr);
diff --git a/tests/check_nick.c b/tests/check_nick.c
new file mode 100644
index 00000000..5858e512
--- /dev/null
+++ b/tests/check_nick.c
@@ -0,0 +1,70 @@
+#include <stdlib.h>
+#include <glib.h>
+#include <gmodule.h>
+#include <check.h>
+#include <string.h>
+#include "irc.h"
+#include "set.h"
+#include "util.h"
+
+START_TEST(test_nick_strip)
+{
+ int i;
+ const char *get[] = { "test:", "test", "test\n",
+ "thisisaveryveryveryverylongnick",
+ "thisisave:ryveryveryverylongnick",
+ "t::::est",
+ NULL };
+ const char *expected[] = { "test", "test", "test",
+ "thisisaveryveryveryveryl",
+ "thisisaveryveryveryveryl",
+ "test",
+ NULL };
+
+ for (i = 0; get[i]; i++) {
+ char copy[30];
+ strcpy(copy, get[i]);
+ nick_strip(copy);
+ fail_unless (strcmp(copy, expected[i]) == 0,
+ "(%d) nick_strip broken: %s -> %s (expected: %s)",
+ i, get[i], copy, expected[i]);
+ }
+}
+END_TEST
+
+START_TEST(test_nick_ok_ok)
+{
+ const char *nicks[] = { "foo", "bar", "bla[", "blie]",
+ "BreEZaH", "\\od^~", NULL };
+ int i;
+
+ for (i = 0; nicks[i]; i++) {
+ fail_unless (nick_ok(nicks[i]) == 1,
+ "nick_ok() failed: %s", nicks[i]);
+ }
+}
+END_TEST
+
+START_TEST(test_nick_ok_notok)
+{
+ const char *nicks[] = { "thisisaveryveryveryveryveryveryverylongnick",
+ "\nillegalchar", "", "nick%", NULL };
+ int i;
+
+ for (i = 0; nicks[i]; i++) {
+ fail_unless (nick_ok(nicks[i]) == 0,
+ "nick_ok() succeeded for invalid: %s", nicks[i]);
+ }
+}
+END_TEST
+
+Suite *nick_suite (void)
+{
+ Suite *s = suite_create("Nick");
+ TCase *tc_core = tcase_create("Core");
+ suite_add_tcase (s, tc_core);
+ tcase_add_test (tc_core, test_nick_ok_ok);
+ tcase_add_test (tc_core, test_nick_ok_notok);
+ tcase_add_test (tc_core, test_nick_strip);
+ return s;
+}
diff --git a/tests/check_util.c b/tests/check_util.c
index 52e8174c..e771238f 100644
--- a/tests/check_util.c
+++ b/tests/check_util.c
@@ -24,11 +24,30 @@ START_TEST(test_strip_linefeed)
}
END_TEST
+START_TEST(test_strip_newlines)
+{
+ int i;
+ const char *get[] = { "Test", "Test\r\n", "Test\nX\n", NULL };
+ const char *expected[] = { "Test", "Test ", "Test X ", NULL };
+
+ for (i = 0; get[i]; i++) {
+ char copy[20], *ret;
+ strcpy(copy, get[i]);
+ ret = strip_newlines(copy);
+ fail_unless (strcmp(copy, expected[i]) == 0,
+ "(%d) strip_newlines broken: %s -> %s (expected: %s)",
+ i, get[i], copy, expected[i]);
+ fail_unless (copy == ret, "Original string not returned");
+ }
+}
+END_TEST
+
Suite *util_suite (void)
{
Suite *s = suite_create("Util");
TCase *tc_core = tcase_create("Core");
suite_add_tcase (s, tc_core);
tcase_add_test (tc_core, test_strip_linefeed);
+ tcase_add_test (tc_core, test_strip_newlines);
return s;
}