Add tests for prefixes_{del,add}_prefix.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 26 Jan 2008 12:36:17 +0000 (13:36 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 26 Jan 2008 12:36:17 +0000 (13:36 +0100)
lib/state.c
lib/state.h
testsuite/test-state.c

index 4a5beb230c788ace10c097a6d51550d844f7c87c..5789f213e37557a706d99b14ba357bb40aa6f411 100644 (file)
@@ -791,7 +791,7 @@ gboolean prefixes_add_prefix(char **prefixes, char prefix)
                return FALSE;
        
        old = *prefixes;
-       *prefixes = g_strdup_printf("%s%c", *prefixes, prefix);
+       *prefixes = g_strdup_printf("%s%c", *prefixes?*prefixes:"", prefix);
 
        g_free(old);
        return TRUE;
@@ -810,6 +810,11 @@ gboolean prefixes_del_prefix(char **prefixes, char prefix)
 
        memmove(p, p+1, strlen(p));
 
+       if (strlen(*prefixes) == 0) {
+               g_free(*prefixes);
+               *prefixes = NULL;
+       }
+
        return TRUE;
 }
 
index 6a991ddf86f9f40a65e14f53b1e98945f44f59ab..7dd12366c05f43b2c73841525e7b5393d757384f 100644 (file)
@@ -127,6 +127,8 @@ G_MODULE_EXPORT gboolean network_nick_set_hostmask(struct network_nick *n, const
 G_MODULE_EXPORT gboolean client_send_state(struct client *, struct network_state *);
 G_MODULE_EXPORT void network_state_log(enum log_level l, const struct network_state *st, const char *fmt, ...);
 G_MODULE_EXPORT void network_state_set_log_fn(struct network_state *st, void (*fn) (enum log_level, void *, const char *), void *userdata);
+G_MODULE_EXPORT gboolean prefixes_add_prefix(char **prefixes, char prefix);
+G_MODULE_EXPORT gboolean prefixes_del_prefix(char **prefixes, char prefix);
 
 
 #endif /* __CTRLPROXY_STATE_H__ */
index 48df5ab468101e37e991639ca108fb7b695e099e..9e47dacfcc0e30bdb710fd9441ffc2d2522481b6 100644 (file)
@@ -27,6 +27,29 @@ gboolean network_nick_set_nick(struct network_nick *, const char *);
 gboolean network_nick_set_hostmask(struct network_nick *, const char *);
 struct network_nick *find_add_network_nick(struct network_state *n, const char *name);
 
+START_TEST(state_prefixes_add_prefix)
+       char *in = NULL;
+       fail_unless (prefixes_add_prefix(&in, '@'));
+       fail_unless (strcmp(in, "@") == 0);
+       fail_unless (prefixes_add_prefix(&in, '%'));
+       fail_unless (strcmp(in, "@%") == 0);
+       fail_if (prefixes_add_prefix(&in, '%'));
+       fail_unless (strcmp(in, "@%") == 0);
+END_TEST
+
+START_TEST(state_prefixes_remove_prefix)
+       char *in = NULL;
+       fail_if (prefixes_del_prefix(&in, '@'));
+       fail_unless (in == NULL);
+       in = g_strdup("%@");
+       fail_unless (prefixes_del_prefix(&in, '%'));
+       fail_unless (strcmp(in, "@") == 0);
+       fail_if (prefixes_del_prefix(&in, '%'));
+       fail_unless (strcmp(in, "@") == 0);
+       fail_unless (prefixes_del_prefix(&in, '@'));
+       fail_unless (in == NULL);
+END_TEST
+
 START_TEST(state_init)
        struct network_state *ns = network_state_init("bla", "Gebruikersnaam", "Computernaam");
 
@@ -270,5 +293,7 @@ Suite *state_suite(void)
        tcase_add_test(tc_core, state_find_network_nick);
        tcase_add_test(tc_core, state_find_add_network_nick);
        tcase_add_test(tc_core, state_handle_state_data);
+       tcase_add_test(tc_core, state_prefixes_add_prefix);
+       tcase_add_test(tc_core, state_prefixes_remove_prefix);
        return s;
 }