4 #include <glib/gstdio.h>
7 #include "check-helpers.h"
8 #include "check-libempathy.h"
9 #include "check-irc-helper.h"
11 #include <libempathy/empathy-irc-network-manager.h>
13 #define GLOBAL_SAMPLE "xml/default-irc-networks-sample.xml"
14 #define USER_SAMPLE "xml/user-irc-networks-sample.xml"
15 #define USER_FILE "xml/user-irc-networks.xml"
17 START_TEST (test_empathy_irc_network_manager_add)
19 EmpathyIrcNetworkManager *mgr;
20 EmpathyIrcNetwork *network;
24 mgr = empathy_irc_network_manager_new (NULL, NULL);
25 fail_if (mgr == NULL);
27 networks = empathy_irc_network_manager_get_networks (mgr);
28 fail_if (networks != NULL);
31 network = empathy_irc_network_new ("My Network");
32 fail_if (network == NULL);
33 empathy_irc_network_manager_add (mgr, network);
34 g_object_unref (network);
36 networks = empathy_irc_network_manager_get_networks (mgr);
37 fail_if (g_slist_length (networks) != 1);
38 g_object_get (networks->data, "name", &name, NULL);
39 fail_if (name == NULL || strcmp (name, "My Network") != 0);
41 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
42 g_slist_free (networks);
44 /* add another network having the same name */
45 network = empathy_irc_network_new ("My Network");
46 fail_if (network == NULL);
47 empathy_irc_network_manager_add (mgr, network);
48 g_object_unref (network);
50 networks = empathy_irc_network_manager_get_networks (mgr);
51 fail_if (g_slist_length (networks) != 2);
52 g_object_get (networks->data, "name", &name, NULL);
53 fail_if (name == NULL || strcmp (name, "My Network") != 0);
55 g_object_get (g_slist_next(networks)->data, "name", &name, NULL);
56 fail_if (name == NULL || strcmp (name, "My Network") != 0);
58 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
59 g_slist_free (networks);
65 START_TEST (test_load_global_file)
67 EmpathyIrcNetworkManager *mgr;
68 gchar *global_file, *user_file;
70 struct server_t freenode_servers[] = {
71 { "irc.freenode.net", 6667, FALSE },
72 { "irc.eu.freenode.net", 6667, FALSE }};
73 struct server_t gimpnet_servers[] = {
74 { "irc.gimp.org", 6667, FALSE },
75 { "irc.us.gimp.org", 6667, FALSE }};
76 struct server_t test_servers[] = {
77 { "irc.test.org", 6669, TRUE }};
78 struct server_t undernet_servers[] = {
79 { "eu.undernet.org", 6667, FALSE }};
80 gboolean network_checked[4];
82 mgr = empathy_irc_network_manager_new (GLOBAL_SAMPLE, NULL);
85 "global-file", &global_file,
86 "user-file", &user_file,
88 fail_if (global_file == NULL || strcmp (global_file, GLOBAL_SAMPLE) != 0);
89 fail_if (user_file != NULL);
93 networks = empathy_irc_network_manager_get_networks (mgr);
94 fail_if (g_slist_length (networks) != 4);
96 network_checked[0] = network_checked[1] = network_checked[2] =
97 network_checked[3] = FALSE;
98 /* check networks and servers */
99 for (l = networks; l != NULL; l = g_slist_next (l))
103 g_object_get (l->data, "name", &name, NULL);
104 fail_if (name == NULL);
106 if (strcmp (name, "Freenode") == 0)
108 check_network (l->data, "Freenode", "UTF-8", freenode_servers, 2);
109 network_checked[0] = TRUE;
111 else if (strcmp (name, "GIMPNet") == 0)
113 check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 2);
114 network_checked[1] = TRUE;
116 else if (strcmp (name, "Test Server") == 0)
118 check_network (l->data, "Test Server", "ISO-8859-1", test_servers, 1);
119 network_checked[2] = TRUE;
121 else if (strcmp (name, "Undernet") == 0)
123 check_network (l->data, "Undernet", "UTF-8", undernet_servers, 1);
124 network_checked[3] = TRUE;
133 fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2] ||
134 !network_checked[3]);
136 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
137 g_slist_free (networks);
138 g_object_unref (mgr);
143 remove_network_named (EmpathyIrcNetworkManager *mgr,
144 const gchar *network_name)
146 GSList *networks, *l;
147 gboolean removed = FALSE;
149 networks = empathy_irc_network_manager_get_networks (mgr);
151 /* check networks and servers */
152 for (l = networks; l != NULL && !removed; l = g_slist_next (l))
154 EmpathyIrcNetwork *network = l->data;
157 g_object_get (network, "name", &name, NULL);
158 fail_if (name == NULL);
160 if (strcmp (name, network_name) == 0)
162 empathy_irc_network_manager_remove (mgr, network);
169 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
170 g_slist_free (networks);
175 START_TEST (test_empathy_irc_network_manager_remove)
177 EmpathyIrcNetworkManager *mgr;
178 GSList *networks, *l;
179 struct server_t freenode_servers[] = {
180 { "irc.freenode.net", 6667, FALSE },
181 { "irc.eu.freenode.net", 6667, FALSE }};
182 struct server_t test_servers[] = {
183 { "irc.test.org", 6669, TRUE }};
184 struct server_t undernet_servers[] = {
185 { "eu.undernet.org", 6667, FALSE }};
186 gboolean network_checked[3];
189 mgr = empathy_irc_network_manager_new (GLOBAL_SAMPLE, NULL);
191 result = remove_network_named (mgr, "GIMPNet");
194 networks = empathy_irc_network_manager_get_networks (mgr);
195 fail_if (g_slist_length (networks) != 3);
197 network_checked[0] = network_checked[1] = network_checked[2] = FALSE;
198 /* check networks and servers */
199 for (l = networks; l != NULL; l = g_slist_next (l))
203 g_object_get (l->data, "name", &name, NULL);
204 fail_if (name == NULL);
206 if (strcmp (name, "Freenode") == 0)
208 check_network (l->data, "Freenode", "UTF-8", freenode_servers, 2);
209 network_checked[0] = TRUE;
211 else if (strcmp (name, "Test Server") == 0)
213 check_network (l->data, "Test Server", "ISO-8859-1", test_servers, 1);
214 network_checked[1] = TRUE;
216 else if (strcmp (name, "Undernet") == 0)
218 check_network (l->data, "Undernet", "UTF-8", undernet_servers, 1);
219 network_checked[2] = TRUE;
228 fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2]);
230 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
231 g_slist_free (networks);
232 g_object_unref (mgr);
237 copy_user_file (void)
243 result = g_file_get_contents (USER_SAMPLE, &buffer, &length, NULL);
246 result = g_file_set_contents (USER_FILE, buffer, length, NULL);
252 START_TEST (test_load_user_file)
254 EmpathyIrcNetworkManager *mgr;
255 gchar *global_file, *user_file;
256 GSList *networks, *l;
257 struct server_t gimpnet_servers[] = {
258 { "irc.gimp.org", 6667, FALSE },
259 { "irc.us.gimp.org", 6667, FALSE },
260 { "irc.au.gimp.org", 6667, FALSE }};
261 struct server_t my_server[] = {
262 { "irc.mysrv.net", 7495, TRUE }};
263 struct server_t another_server[] = {
264 { "irc.anothersrv.be", 6660, FALSE }};
265 gboolean network_checked[3];
268 mgr = empathy_irc_network_manager_new (NULL, USER_FILE);
271 "global-file", &global_file,
272 "user-file", &user_file,
274 fail_if (global_file != NULL);
275 fail_if (user_file == NULL || strcmp (user_file, USER_FILE) != 0);
276 g_free (global_file);
279 networks = empathy_irc_network_manager_get_networks (mgr);
280 fail_if (g_slist_length (networks) != 3);
282 network_checked[0] = network_checked[1] = network_checked[2] = FALSE;
283 /* check networks and servers */
284 for (l = networks; l != NULL; l = g_slist_next (l))
288 g_object_get (l->data, "name", &name, NULL);
289 fail_if (name == NULL);
291 if (strcmp (name, "GIMPNet") == 0)
293 check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 3);
294 network_checked[0] = TRUE;
296 else if (strcmp (name, "My Server") == 0)
298 check_network (l->data, "My Server", "UTF-8", my_server, 1);
299 network_checked[1] = TRUE;
301 else if (strcmp (name, "Another Server") == 0)
303 check_network (l->data, "Another Server", "UTF-8", another_server, 1);
304 network_checked[2] = TRUE;
313 fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2]);
315 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
316 g_slist_free (networks);
317 g_object_unref (mgr);
321 START_TEST (test_load_both_files)
323 EmpathyIrcNetworkManager *mgr;
324 gchar *global_file, *user_file;
325 GSList *networks, *l;
326 struct server_t freenode_servers[] = {
327 { "irc.freenode.net", 6667, FALSE },
328 { "irc.eu.freenode.net", 6667, FALSE }};
329 struct server_t gimpnet_servers[] = {
330 { "irc.gimp.org", 6667, FALSE },
331 { "irc.us.gimp.org", 6667, FALSE },
332 { "irc.au.gimp.org", 6667, FALSE }};
333 struct server_t my_server[] = {
334 { "irc.mysrv.net", 7495, TRUE }};
335 struct server_t another_server[] = {
336 { "irc.anothersrv.be", 6660, FALSE }};
337 struct server_t undernet_servers[] = {
338 { "eu.undernet.org", 6667, FALSE }};
339 gboolean network_checked[5];
341 mgr = empathy_irc_network_manager_new (GLOBAL_SAMPLE, USER_FILE);
344 "global-file", &global_file,
345 "user-file", &user_file,
347 fail_if (global_file == NULL || strcmp (global_file, GLOBAL_SAMPLE) != 0);
348 fail_if (user_file == NULL || strcmp (user_file, USER_FILE) != 0);
349 g_free (global_file);
352 networks = empathy_irc_network_manager_get_networks (mgr);
353 fail_if (g_slist_length (networks) != 5);
355 network_checked[0] = network_checked[1] = network_checked[2] =
356 network_checked[3] = network_checked[4] = FALSE;
357 /* check networks and servers */
358 for (l = networks; l != NULL; l = g_slist_next (l))
362 g_object_get (l->data, "name", &name, NULL);
363 fail_if (name == NULL);
365 if (strcmp (name, "Freenode") == 0)
367 check_network (l->data, "Freenode", "UTF-8", freenode_servers, 2);
368 network_checked[0] = TRUE;
370 else if (strcmp (name, "GIMPNet") == 0)
372 check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 3);
373 network_checked[1] = TRUE;
375 else if (strcmp (name, "My Server") == 0)
377 check_network (l->data, "My Server", "UTF-8", my_server, 1);
378 network_checked[2] = TRUE;
380 else if (strcmp (name, "Another Server") == 0)
382 check_network (l->data, "Another Server", "UTF-8", another_server, 1);
383 network_checked[3] = TRUE;
385 else if (strcmp (name, "Undernet") == 0)
387 check_network (l->data, "Undernet", "UTF-8", undernet_servers, 1);
388 network_checked[4] = TRUE;
397 fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2] ||
398 !network_checked[3] || !network_checked[4]);
400 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
401 g_slist_free (networks);
402 g_object_unref (mgr);
406 START_TEST (test_modify_user_file)
408 EmpathyIrcNetworkManager *mgr;
409 EmpathyIrcNetwork *network;
410 EmpathyIrcServer *server;
411 gchar *global_file, *user_file;
412 GSList *networks, *l;
413 struct server_t gimpnet_servers[] = {
414 { "irc.gimp.org", 6667, TRUE },
415 { "irc.us.gimp.org", 6668, FALSE }};
416 struct server_t great_server[] = {
417 { "irc.greatserver.com", 7873, TRUE }};
418 struct server_t another_server[] = {
419 { "irc.anothersrv.be", 6660, FALSE }};
420 gboolean network_modified[2];
421 gboolean network_checked[3];
424 mgr = empathy_irc_network_manager_new (NULL, USER_FILE);
427 "global-file", &global_file,
428 "user-file", &user_file,
430 fail_if (global_file != NULL);
431 fail_if (user_file == NULL || strcmp (user_file, USER_FILE) != 0);
432 g_free (global_file);
435 networks = empathy_irc_network_manager_get_networks (mgr);
436 fail_if (g_slist_length (networks) != 3);
438 network_modified[0] = network_modified[1] = FALSE;
439 /* check networks and servers */
440 for (l = networks; l != NULL; l = g_slist_next (l))
442 EmpathyIrcNetwork *network;
446 g_object_get (network, "name", &name, NULL);
447 fail_if (name == NULL);
449 if (strcmp (name, "GIMPNet") == 0)
451 GSList *servers, *ll;
454 g_object_set (network, "charset", "ISO-8859-1", NULL);
456 servers = empathy_irc_network_get_servers (network);
457 for (ll = servers; ll != NULL; ll = g_slist_next (ll))
459 EmpathyIrcServer *server;
463 g_object_get (server, "address", &address, NULL);
464 if (strcmp (address, "irc.gimp.org") == 0)
467 g_object_set (server, "ssl", TRUE, NULL);
469 else if (strcmp (address, "irc.us.gimp.org") == 0)
472 g_object_set (server, "port", 6668, NULL);
474 else if (strcmp (address, "irc.au.gimp.org") == 0)
476 /* remove this server */
477 empathy_irc_network_remove_server (network, server);
487 network_modified[0] = TRUE;
489 g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
490 g_slist_free (servers);
492 else if (strcmp (name, "My Server") == 0)
494 /* remove this network */
495 empathy_irc_network_manager_remove (mgr, network);
496 network_modified[1] = TRUE;
498 else if (strcmp (name, "Another Server") == 0)
500 /* Don't change this one */
509 fail_if (!network_modified[0] || !network_modified[1]);
511 /* Add a new network */
512 network = empathy_irc_network_new ("Great Server");
513 server = empathy_irc_server_new ("irc.greatserver.com", 7873, TRUE);
514 empathy_irc_network_append_server (network, server);
515 empathy_irc_network_manager_add (mgr, network);
516 g_object_unref (server);
517 g_object_unref (network);
519 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
520 g_slist_free (networks);
521 g_object_unref (mgr);
524 /* Now let's reload the file and check its contain */
525 mgr = empathy_irc_network_manager_new (NULL, USER_FILE);
527 networks = empathy_irc_network_manager_get_networks (mgr);
528 fail_if (g_slist_length (networks) != 3);
530 network_checked[0] = network_checked[1] = network_checked[2] = FALSE;
531 /* check networks and servers */
532 for (l = networks; l != NULL; l = g_slist_next (l))
536 g_object_get (l->data, "name", &name, NULL);
537 fail_if (name == NULL);
539 if (strcmp (name, "GIMPNet") == 0)
541 check_network (l->data, "GIMPNet", "ISO-8859-1", gimpnet_servers, 2);
542 network_checked[0] = TRUE;
544 else if (strcmp (name, "Great Server") == 0)
546 check_network (l->data, "Great Server", "UTF-8", great_server, 1);
547 network_checked[1] = TRUE;
549 else if (strcmp (name, "Another Server") == 0)
551 check_network (l->data, "Another Server", "UTF-8", another_server, 1);
552 network_checked[2] = TRUE;
561 fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2]);
563 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
564 g_slist_free (networks);
565 g_object_unref (mgr);
569 START_TEST (test_modify_both_files)
571 EmpathyIrcNetworkManager *mgr;
572 EmpathyIrcNetwork *network;
573 EmpathyIrcServer *server;
574 gchar *global_file, *user_file;
575 GSList *networks, *l;
576 struct server_t gimpnet_servers[] = {
577 { "irc.gimp.org", 6667, TRUE },
578 { "irc.us.gimp.org", 6668, FALSE }};
579 struct server_t great_server[] = {
580 { "irc.greatserver.com", 7873, TRUE }};
581 struct server_t another_server[] = {
582 { "irc.anothersrv.be", 6660, FALSE }};
583 struct server_t undernet_servers[] = {
584 { "eu.undernet.org", 6667, FALSE },
585 { "us.undernet.org", 6667, FALSE }};
586 gboolean network_modified[4];
587 gboolean network_checked[4];
590 mgr = empathy_irc_network_manager_new (GLOBAL_SAMPLE, USER_FILE);
593 "global-file", &global_file,
594 "user-file", &user_file,
596 fail_if (global_file == NULL || strcmp (global_file, GLOBAL_SAMPLE) != 0);
597 fail_if (user_file == NULL || strcmp (user_file, USER_FILE) != 0);
598 g_free (global_file);
601 networks = empathy_irc_network_manager_get_networks (mgr);
602 fail_if (g_slist_length (networks) != 5);
604 network_modified[0] = network_modified[1] = network_modified[2] =
605 network_modified[3] = FALSE;
606 /* check networks and servers */
607 for (l = networks; l != NULL; l = g_slist_next (l))
609 EmpathyIrcNetwork *network;
613 g_object_get (network, "name", &name, NULL);
614 fail_if (name == NULL);
616 if (strcmp (name, "GIMPNet") == 0)
618 /* Modify user network */
619 GSList *servers, *ll;
621 servers = empathy_irc_network_get_servers (network);
622 for (ll = servers; ll != NULL; ll = g_slist_next (ll))
624 EmpathyIrcServer *server;
628 g_object_get (server, "address", &address, NULL);
629 if (strcmp (address, "irc.gimp.org") == 0)
632 g_object_set (server, "ssl", TRUE, NULL);
634 else if (strcmp (address, "irc.us.gimp.org") == 0)
637 g_object_set (server, "port", 6668, NULL);
639 else if (strcmp (address, "irc.au.gimp.org") == 0)
641 /* remove this server */
642 empathy_irc_network_remove_server (network, server);
652 network_modified[0] = TRUE;
654 g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
655 g_slist_free (servers);
657 else if (strcmp (name, "My Server") == 0)
659 /* remove user network */
660 empathy_irc_network_manager_remove (mgr, network);
661 network_modified[1] = TRUE;
663 else if (strcmp (name, "Freenode") == 0)
665 /* remove global network */
666 empathy_irc_network_manager_remove (mgr, network);
667 network_modified[2] = TRUE;
669 else if (strcmp (name, "Undernet") == 0)
671 /* modify global network */
672 EmpathyIrcServer *server;
674 server = empathy_irc_server_new ("us.undernet.org", 6667, FALSE);
675 empathy_irc_network_append_server (network, server);
676 g_object_unref (server);
678 network_modified[3] = TRUE;
680 else if (strcmp (name, "Another Server") == 0)
682 /* Don't change this one */
691 fail_if (!network_modified[0] || !network_modified[1] || !network_modified[2]
692 || !network_modified[3]);
694 /* Add a new network */
695 network = empathy_irc_network_new ("Great Server");
696 server = empathy_irc_server_new ("irc.greatserver.com", 7873, TRUE);
697 empathy_irc_network_append_server (network, server);
698 empathy_irc_network_manager_add (mgr, network);
699 g_object_unref (server);
700 g_object_unref (network);
702 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
703 g_slist_free (networks);
704 g_object_unref (mgr);
707 /* Now let's reload the file and check its contain */
708 mgr = empathy_irc_network_manager_new (GLOBAL_SAMPLE, USER_FILE);
710 networks = empathy_irc_network_manager_get_networks (mgr);
711 fail_if (g_slist_length (networks) != 4);
713 network_checked[0] = network_checked[1] = network_checked[2] =
714 network_checked[3] = FALSE;
715 /* check networks and servers */
716 for (l = networks; l != NULL; l = g_slist_next (l))
720 g_object_get (l->data, "name", &name, NULL);
721 fail_if (name == NULL);
723 if (strcmp (name, "GIMPNet") == 0)
725 check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 2);
726 network_checked[0] = TRUE;
728 else if (strcmp (name, "Great Server") == 0)
730 check_network (l->data, "Great Server", "UTF-8", great_server, 1);
731 network_checked[1] = TRUE;
733 else if (strcmp (name, "Another Server") == 0)
735 check_network (l->data, "Another Server", "UTF-8", another_server, 1);
736 network_checked[2] = TRUE;
738 else if (strcmp (name, "Undernet") == 0)
740 check_network (l->data, "Undernet", "UTF-8", undernet_servers, 2);
741 network_checked[3] = TRUE;
750 fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2] ||
751 !network_checked[3]);
753 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
754 g_slist_free (networks);
755 g_object_unref (mgr);
759 START_TEST (test_empathy_irc_network_manager_find_network_by_address)
761 EmpathyIrcNetworkManager *mgr;
762 EmpathyIrcNetwork *network;
763 struct server_t freenode_servers[] = {
764 { "irc.freenode.net", 6667, FALSE },
765 { "irc.eu.freenode.net", 6667, FALSE }};
767 mgr = empathy_irc_network_manager_new (GLOBAL_SAMPLE, NULL);
769 network = empathy_irc_network_manager_find_network_by_address (mgr,
771 fail_if (network == NULL);
772 check_network (network, "Freenode", "UTF-8", freenode_servers, 2);
774 network = empathy_irc_network_manager_find_network_by_address (mgr,
775 "irc.eu.freenode.net");
776 fail_if (network == NULL);
777 check_network (network, "Freenode", "UTF-8", freenode_servers, 2);
779 network = empathy_irc_network_manager_find_network_by_address (mgr,
781 fail_if (network != NULL);
783 g_object_unref (mgr);
787 START_TEST (test_no_modify_with_empty_user_file)
789 EmpathyIrcNetworkManager *mgr;
792 /* user don't have a networks file yet */
793 g_unlink (USER_FILE);
795 mgr = empathy_irc_network_manager_new (GLOBAL_SAMPLE, USER_FILE);
796 g_object_unref (mgr);
798 /* We didn't modify anything so USER_FILE should be empty */
799 mgr = empathy_irc_network_manager_new (NULL, USER_FILE);
801 networks = empathy_irc_network_manager_get_networks (mgr);
802 fail_if (g_slist_length (networks) != 0);
804 g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
805 g_slist_free (networks);
806 g_object_unref (mgr);
811 make_empathy_irc_network_manager_tcase (void)
813 TCase *tc = tcase_create ("empathy-irc-network-manager");
814 tcase_add_test (tc, test_empathy_irc_network_manager_add);
815 tcase_add_test (tc, test_load_global_file);
816 tcase_add_test (tc, test_empathy_irc_network_manager_remove);
817 tcase_add_test (tc, test_load_user_file);
818 tcase_add_test (tc, test_load_both_files);
819 tcase_add_test (tc, test_modify_user_file);
820 tcase_add_test (tc, test_modify_both_files);
821 tcase_add_test (tc, test_empathy_irc_network_manager_find_network_by_address);
822 tcase_add_test (tc, test_no_modify_with_empty_user_file);