]> git.0d.be Git - empathy.git/blob - tests/empathy-irc-network-manager-test.c
tp-account-widgets: rename all the files from empathy-* to tpaw-*
[empathy.git] / tests / empathy-irc-network-manager-test.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <glib/gstdio.h>
5 #include <tp-account-widgets/tpaw-irc-network-manager.h>
6
7 #include "test-helper.h"
8 #include "test-irc-helper.h"
9
10 #define GLOBAL_SAMPLE "default-irc-networks-sample.xml"
11 #define USER_SAMPLE "user-irc-networks-sample.xml"
12 #define USER_FILE "user-irc-networks.xml"
13
14 static void
15 test_tpaw_irc_network_manager_add (void)
16 {
17   TpawIrcNetworkManager *mgr;
18   TpawIrcNetwork *network;
19   GSList *networks;
20   gchar *name;
21
22   mgr = tpaw_irc_network_manager_new (NULL, NULL);
23   g_assert (mgr != NULL);
24
25   networks = tpaw_irc_network_manager_get_networks (mgr);
26   g_assert (networks == NULL);
27
28   /* add a network */
29   network = tpaw_irc_network_new ("My Network");
30   g_assert (network != NULL);
31   tpaw_irc_network_manager_add (mgr, network);
32   g_object_unref (network);
33
34   networks = tpaw_irc_network_manager_get_networks (mgr);
35   g_assert_cmpuint (g_slist_length (networks), ==, 1);
36   g_object_get (networks->data, "name", &name, NULL);
37   g_assert_cmpstr (name, ==, "My Network");
38   g_free (name);
39   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
40   g_slist_free (networks);
41
42   /* add another network having the same name */
43   network = tpaw_irc_network_new ("My Network");
44   g_assert (network != NULL);
45   tpaw_irc_network_manager_add (mgr, network);
46   g_object_unref (network);
47
48   networks = tpaw_irc_network_manager_get_networks (mgr);
49   g_assert_cmpuint (g_slist_length (networks), ==, 2);
50   g_object_get (networks->data, "name", &name, NULL);
51   g_assert_cmpstr (name, ==, "My Network");
52   g_free (name);
53   g_object_get (g_slist_next (networks)->data, "name", &name, NULL);
54   g_assert_cmpstr (name, ==, "My Network");
55   g_free (name);
56   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
57   g_slist_free (networks);
58
59   g_object_unref (mgr);
60 }
61
62 static void
63 test_load_global_file (void)
64 {
65   TpawIrcNetworkManager *mgr;
66   gchar *global_file, *user_file;
67   GSList *networks, *l;
68   struct server_t freenode_servers[] = {
69     { "irc.freenode.net", 6667, FALSE },
70     { "irc.eu.freenode.net", 6667, FALSE }};
71   struct server_t gimpnet_servers[] = {
72     { "irc.gimp.org", 6667, FALSE },
73     { "irc.us.gimp.org", 6667, FALSE }};
74   struct server_t test_servers[] = {
75     { "irc.test.org", 6669, TRUE }};
76   struct server_t undernet_servers[] = {
77     { "eu.undernet.org", 6667, FALSE }};
78   gboolean network_checked[4];
79   gchar *global_file_orig;
80
81   global_file_orig = get_xml_file (GLOBAL_SAMPLE);
82   mgr = tpaw_irc_network_manager_new (global_file_orig, NULL);
83
84   g_object_get (mgr,
85       "global-file", &global_file,
86       "user-file", &user_file,
87       NULL);
88   g_assert_cmpstr (global_file, ==, global_file_orig);
89   g_free (global_file);
90   g_free (global_file_orig);
91   g_free (user_file);
92
93   networks = tpaw_irc_network_manager_get_networks (mgr);
94   g_assert_cmpuint (g_slist_length (networks), ==, 4);
95
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))
100     {
101       gchar *name;
102
103       g_object_get (l->data, "name", &name, NULL);
104       g_assert (name != NULL);
105
106       if (strcmp (name, "Freenode") == 0)
107         {
108           check_network (l->data, "Freenode", "UTF-8", freenode_servers, 2);
109           network_checked[0] = TRUE;
110         }
111       else if (strcmp (name, "GIMPNet") == 0)
112         {
113           check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 2);
114           network_checked[1] = TRUE;
115         }
116       else if (strcmp (name, "Test Server") == 0)
117         {
118           check_network (l->data, "Test Server", "ISO-8859-1", test_servers, 1);
119           network_checked[2] = TRUE;
120         }
121       else if (strcmp (name, "Undernet") == 0)
122         {
123           check_network (l->data, "Undernet", "UTF-8", undernet_servers, 1);
124           network_checked[3] = TRUE;
125         }
126       else
127         {
128           g_assert_not_reached ();
129         }
130
131       g_free (name);
132     }
133   g_assert (network_checked[0] && network_checked[1] && network_checked[2] &&
134       network_checked[3]);
135
136   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
137   g_slist_free (networks);
138   g_object_unref (mgr);
139 }
140
141 static gboolean
142 remove_network_named (TpawIrcNetworkManager *mgr,
143                       const gchar *network_name)
144 {
145   GSList *networks, *l;
146   gboolean removed = FALSE;
147
148   networks = tpaw_irc_network_manager_get_networks (mgr);
149
150   /* check networks and servers */
151   for (l = networks; l != NULL && !removed; l = g_slist_next (l))
152     {
153       TpawIrcNetwork *network = l->data;
154       gchar *name;
155
156       g_object_get (network, "name", &name, NULL);
157       g_assert (name != NULL);
158
159       if (strcmp (name, network_name) == 0)
160         {
161           tpaw_irc_network_manager_remove (mgr, network);
162           removed = TRUE;
163         }
164
165       g_free (name);
166     }
167
168   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
169   g_slist_free (networks);
170
171   return removed;
172 }
173
174 static void
175 test_tpaw_irc_network_manager_remove (void)
176 {
177   TpawIrcNetworkManager *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];
187   gboolean result;
188   gchar *global_file_orig;
189
190   global_file_orig = get_xml_file (GLOBAL_SAMPLE);
191   mgr = tpaw_irc_network_manager_new (global_file_orig, NULL);
192   g_free (global_file_orig);
193
194   result = remove_network_named (mgr, "GIMPNet");
195   g_assert (result);
196
197   networks = tpaw_irc_network_manager_get_networks (mgr);
198   g_assert_cmpuint (g_slist_length (networks), ==, 3);
199
200   network_checked[0] = network_checked[1] = network_checked[2] = FALSE;
201   /* check networks and servers */
202   for (l = networks; l != NULL; l = g_slist_next (l))
203     {
204       gchar *name;
205
206       g_object_get (l->data, "name", &name, NULL);
207       g_assert (name != NULL);
208
209       if (strcmp (name, "Freenode") == 0)
210         {
211           check_network (l->data, "Freenode", "UTF-8", freenode_servers, 2);
212           network_checked[0] = TRUE;
213         }
214       else if (strcmp (name, "Test Server") == 0)
215         {
216           check_network (l->data, "Test Server", "ISO-8859-1", test_servers, 1);
217           network_checked[1] = TRUE;
218         }
219       else if (strcmp (name, "Undernet") == 0)
220         {
221           check_network (l->data, "Undernet", "UTF-8", undernet_servers, 1);
222           network_checked[2] = TRUE;
223         }
224       else
225         {
226           g_assert_not_reached ();
227         }
228
229       g_free (name);
230     }
231   g_assert (network_checked[0] && network_checked[1] && network_checked[2]);
232
233   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
234   g_slist_free (networks);
235   g_object_unref (mgr);
236 }
237
238 static void
239 test_load_user_file (void)
240 {
241   TpawIrcNetworkManager *mgr;
242   gchar *global_file, *user_file;
243   GSList *networks, *l;
244   struct server_t gimpnet_servers[] = {
245     { "irc.gimp.org", 6667, FALSE },
246     { "irc.us.gimp.org", 6667, FALSE },
247     { "irc.au.gimp.org", 6667, FALSE }};
248   struct server_t my_server[] = {
249     { "irc.mysrv.net", 7495, TRUE }};
250   struct server_t another_server[] = {
251     { "irc.anothersrv.be", 6660, FALSE }};
252   gboolean network_checked[3];
253   gchar *user_file_orig;
254
255   copy_xml_file (USER_SAMPLE, USER_FILE);
256   user_file_orig = get_user_xml_file (USER_FILE);
257   mgr = tpaw_irc_network_manager_new (NULL, user_file_orig);
258
259   g_object_get (mgr,
260       "global-file", &global_file,
261       "user-file", &user_file,
262       NULL);
263   g_assert (global_file == NULL);
264   g_assert_cmpstr (user_file, ==, user_file_orig);
265   g_free (global_file);
266   g_free (user_file);
267   g_free (user_file_orig);
268
269   networks = tpaw_irc_network_manager_get_networks (mgr);
270   g_assert_cmpuint (g_slist_length (networks), ==, 3);
271
272   network_checked[0] = network_checked[1] = network_checked[2] = FALSE;
273   /* check networks and servers */
274   for (l = networks; l != NULL; l = g_slist_next (l))
275     {
276       gchar *name;
277
278       g_object_get (l->data, "name", &name, NULL);
279       g_assert (name != NULL);
280
281       if (strcmp (name, "GIMPNet") == 0)
282         {
283           check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 3);
284           network_checked[0] = TRUE;
285         }
286       else if (strcmp (name, "My Server") == 0)
287         {
288           check_network (l->data, "My Server", "UTF-8", my_server, 1);
289           network_checked[1] = TRUE;
290         }
291       else if (strcmp (name, "Another Server") == 0)
292         {
293           check_network (l->data, "Another Server", "UTF-8", another_server, 1);
294           network_checked[2] = TRUE;
295         }
296       else
297         {
298           g_assert_not_reached ();
299         }
300
301       g_free (name);
302     }
303   g_assert (network_checked[0] && network_checked[1] && network_checked[2]);
304
305   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
306   g_slist_free (networks);
307   g_object_unref (mgr);
308 }
309
310 static void
311 test_load_both_files (void)
312 {
313   TpawIrcNetworkManager *mgr;
314   gchar *global_file, *user_file;
315   GSList *networks, *l;
316   struct server_t freenode_servers[] = {
317     { "irc.freenode.net", 6667, FALSE },
318     { "irc.eu.freenode.net", 6667, FALSE }};
319   struct server_t gimpnet_servers[] = {
320     { "irc.gimp.org", 6667, FALSE },
321     { "irc.us.gimp.org", 6667, FALSE },
322     { "irc.au.gimp.org", 6667, FALSE }};
323   struct server_t my_server[] = {
324     { "irc.mysrv.net", 7495, TRUE }};
325   struct server_t another_server[] = {
326     { "irc.anothersrv.be", 6660, FALSE }};
327   struct server_t undernet_servers[] = {
328     { "eu.undernet.org", 6667, FALSE }};
329   gboolean network_checked[5];
330   gchar *global_file_orig, *user_file_orig;
331
332   global_file_orig = get_xml_file (GLOBAL_SAMPLE);
333   user_file_orig = get_user_xml_file (USER_FILE);
334   mgr = tpaw_irc_network_manager_new (global_file_orig, user_file_orig);
335
336   g_object_get (mgr,
337       "global-file", &global_file,
338       "user-file", &user_file,
339       NULL);
340   g_assert_cmpstr (global_file, ==, global_file_orig);
341   g_assert_cmpstr (user_file, ==, user_file_orig);
342   g_free (global_file);
343   g_free (global_file_orig);
344   g_free (user_file);
345   g_free (user_file_orig);
346
347   networks = tpaw_irc_network_manager_get_networks (mgr);
348   g_assert_cmpuint (g_slist_length (networks), ==, 5);
349
350   network_checked[0] = network_checked[1] = network_checked[2] =
351     network_checked[3] = network_checked[4] = FALSE;
352   /* check networks and servers */
353   for (l = networks; l != NULL; l = g_slist_next (l))
354     {
355       gchar *name;
356
357       g_object_get (l->data, "name", &name, NULL);
358       g_assert (name != NULL);
359
360       if (strcmp (name, "Freenode") == 0)
361         {
362           check_network (l->data, "Freenode", "UTF-8", freenode_servers, 2);
363           network_checked[0] = TRUE;
364         }
365       else if (strcmp (name, "GIMPNet") == 0)
366         {
367           check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 3);
368           network_checked[1] = TRUE;
369         }
370       else if (strcmp (name, "My Server") == 0)
371         {
372           check_network (l->data, "My Server", "UTF-8", my_server, 1);
373           network_checked[2] = TRUE;
374         }
375       else if (strcmp (name, "Another Server") == 0)
376         {
377           check_network (l->data, "Another Server", "UTF-8", another_server, 1);
378           network_checked[3] = TRUE;
379         }
380       else if (strcmp (name, "Undernet") == 0)
381         {
382           check_network (l->data, "Undernet", "UTF-8", undernet_servers, 1);
383           network_checked[4] = TRUE;
384         }
385       else
386         {
387           g_assert_not_reached ();
388         }
389
390       g_free (name);
391     }
392   g_assert (network_checked[0] && network_checked[1] && network_checked[2] &&
393       network_checked[3] && network_checked[4]);
394
395   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
396   g_slist_free (networks);
397   g_object_unref (mgr);
398 }
399
400 static void
401 test_modify_user_file (void)
402 {
403   TpawIrcNetworkManager *mgr;
404   TpawIrcNetwork *network;
405   TpawIrcServer *server;
406   gchar *global_file, *user_file;
407   GSList *networks, *l;
408   struct server_t gimpnet_servers[] = {
409     { "irc.gimp.org", 6667, TRUE },
410     { "irc.us.gimp.org", 6668, FALSE }};
411   struct server_t great_server[] = {
412     { "irc.greatserver.com", 7873, TRUE }};
413   struct server_t another_server[] = {
414     { "irc.anothersrv.be", 6660, FALSE }};
415   gboolean network_modified[2];
416   gboolean network_checked[3];
417   gchar *user_file_orig;
418
419   copy_xml_file (USER_SAMPLE, USER_FILE);
420   user_file_orig = get_user_xml_file (USER_FILE);
421   mgr = tpaw_irc_network_manager_new (NULL, user_file_orig);
422
423   g_object_get (mgr,
424       "global-file", &global_file,
425       "user-file", &user_file,
426       NULL);
427   g_assert (global_file == NULL);
428   g_assert_cmpstr (user_file, ==, user_file_orig);
429   g_free (global_file);
430   g_free (user_file);
431
432   networks = tpaw_irc_network_manager_get_networks (mgr);
433   g_assert_cmpuint (g_slist_length (networks), ==, 3);
434
435   network_modified[0] = network_modified[1] = FALSE;
436   /* check networks and servers */
437   for (l = networks; l != NULL; l = g_slist_next (l))
438     {
439       gchar *name;
440
441       network = l->data;
442       g_object_get (network, "name", &name, NULL);
443       g_assert (name != NULL);
444
445       if (strcmp (name, "GIMPNet") == 0)
446         {
447           GSList *servers, *ll;
448
449           /* change charset */
450           g_object_set (network, "charset", "ISO-8859-1", NULL);
451
452           servers = tpaw_irc_network_get_servers (network);
453           for (ll = servers; ll != NULL; ll = g_slist_next (ll))
454             {
455               gchar *address;
456
457               server = ll->data;
458               g_object_get (server, "address", &address, NULL);
459               if (strcmp (address, "irc.gimp.org") == 0)
460                 {
461                   /* change SSL */
462                   g_object_set (server, "ssl", TRUE, NULL);
463                 }
464               else if (strcmp (address, "irc.us.gimp.org") == 0)
465                 {
466                   /* change port */
467                   g_object_set (server, "port", 6668, NULL);
468                 }
469               else if (strcmp (address, "irc.au.gimp.org") == 0)
470                 {
471                   /* remove this server */
472                   tpaw_irc_network_remove_server (network, server);
473                 }
474               else
475                 {
476                   g_assert_not_reached ();
477                 }
478
479               g_free (address);
480             }
481
482           network_modified[0] = TRUE;
483
484           g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
485           g_slist_free (servers);
486         }
487       else if (strcmp (name, "My Server") == 0)
488         {
489           /* remove this network */
490           tpaw_irc_network_manager_remove (mgr, network);
491           network_modified[1] = TRUE;
492         }
493       else if (strcmp (name, "Another Server") == 0)
494         {
495           /* Don't change this one */
496         }
497       else
498         {
499           g_assert_not_reached ();
500         }
501
502       g_free (name);
503     }
504   g_assert (network_modified[0] && network_modified[1]);
505
506   /* Add a new network */
507   network = tpaw_irc_network_new ("Great Server");
508   server = tpaw_irc_server_new ("irc.greatserver.com", 7873, TRUE);
509   tpaw_irc_network_append_server (network, server);
510   tpaw_irc_network_manager_add (mgr, network);
511   g_object_unref (server);
512   g_object_unref (network);
513
514   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
515   g_slist_free (networks);
516   g_object_unref (mgr);
517
518
519   /* Now let's reload the file and check its contain */
520   mgr = tpaw_irc_network_manager_new (NULL, user_file_orig);
521   g_free (user_file_orig);
522
523   networks = tpaw_irc_network_manager_get_networks (mgr);
524   g_assert_cmpuint (g_slist_length (networks), ==, 3);
525
526   network_checked[0] = network_checked[1] = network_checked[2] = FALSE;
527   /* check networks and servers */
528   for (l = networks; l != NULL; l = g_slist_next (l))
529     {
530       gchar *name;
531
532       g_object_get (l->data, "name", &name, NULL);
533       g_assert (name != NULL);
534
535       if (strcmp (name, "GIMPNet") == 0)
536         {
537           check_network (l->data, "GIMPNet", "ISO-8859-1", gimpnet_servers, 2);
538           network_checked[0] = TRUE;
539         }
540       else if (strcmp (name, "Great Server") == 0)
541         {
542           check_network (l->data, "Great Server", "UTF-8", great_server, 1);
543           network_checked[1] = TRUE;
544         }
545       else if (strcmp (name, "Another Server") == 0)
546         {
547           check_network (l->data, "Another Server", "UTF-8", another_server, 1);
548           network_checked[2] = TRUE;
549         }
550       else
551         {
552           g_assert_not_reached ();
553         }
554
555       g_free (name);
556     }
557   g_assert (network_checked[0] && network_checked[1] && network_checked[2]);
558
559   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
560   g_slist_free (networks);
561   g_object_unref (mgr);
562 }
563
564 static void
565 test_modify_both_files (void)
566 {
567   TpawIrcNetworkManager *mgr;
568   TpawIrcNetwork *network;
569   TpawIrcServer *server;
570   gchar *global_file, *user_file;
571   GSList *networks, *l;
572   struct server_t gimpnet_servers[] = {
573     { "irc.gimp.org", 6667, TRUE },
574     { "irc.us.gimp.org", 6668, FALSE }};
575   struct server_t great_server[] = {
576     { "irc.greatserver.com", 7873, TRUE }};
577   struct server_t another_server[] = {
578     { "irc.anothersrv.be", 6660, FALSE }};
579   struct server_t undernet_servers[] = {
580     { "eu.undernet.org", 6667, FALSE },
581     { "us.undernet.org", 6667, FALSE }};
582   gboolean network_modified[4];
583   gboolean network_checked[4];
584   gchar *global_file_orig, *user_file_orig;
585
586   copy_xml_file (USER_SAMPLE, USER_FILE);
587   global_file_orig = get_xml_file (GLOBAL_SAMPLE);
588   user_file_orig = get_user_xml_file (USER_FILE);
589   mgr = tpaw_irc_network_manager_new (global_file_orig, user_file_orig);
590
591   g_object_get (mgr,
592       "global-file", &global_file,
593       "user-file", &user_file,
594       NULL);
595   g_assert_cmpstr (global_file, ==, global_file_orig);
596   g_assert_cmpstr (user_file, ==, user_file_orig);
597   g_free (global_file);
598   g_free (global_file_orig);
599   g_free (user_file);
600   g_free (user_file_orig);
601
602   networks = tpaw_irc_network_manager_get_networks (mgr);
603   g_assert_cmpuint (g_slist_length (networks), ==, 5);
604
605   network_modified[0] = network_modified[1] = network_modified[2] =
606     network_modified[3] = FALSE;
607   /* check networks and servers */
608   for (l = networks; l != NULL; l = g_slist_next (l))
609     {
610       gchar *name;
611
612       network = l->data;
613       g_object_get (network, "name", &name, NULL);
614       g_assert (name != NULL);
615
616       if (strcmp (name, "GIMPNet") == 0)
617         {
618           /* Modify user network */
619           GSList *servers, *ll;
620
621           servers = tpaw_irc_network_get_servers (network);
622           for (ll = servers; ll != NULL; ll = g_slist_next (ll))
623             {
624               gchar *address;
625
626               server = ll->data;
627               g_object_get (server, "address", &address, NULL);
628               if (strcmp (address, "irc.gimp.org") == 0)
629                 {
630                   /* change SSL */
631                   g_object_set (server, "ssl", TRUE, NULL);
632                 }
633               else if (strcmp (address, "irc.us.gimp.org") == 0)
634                 {
635                   /* change port */
636                   g_object_set (server, "port", 6668, NULL);
637                 }
638               else if (strcmp (address, "irc.au.gimp.org") == 0)
639                 {
640                   /* remove this server */
641                   tpaw_irc_network_remove_server (network, server);
642                 }
643               else
644                 {
645                   g_assert_not_reached ();
646                 }
647
648               g_free (address);
649             }
650
651           network_modified[0] = TRUE;
652
653           g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
654           g_slist_free (servers);
655         }
656       else if (strcmp (name, "My Server") == 0)
657         {
658           /* remove user network */
659           tpaw_irc_network_manager_remove (mgr, network);
660           network_modified[1] = TRUE;
661         }
662       else if (strcmp (name, "Freenode") == 0)
663         {
664           /* remove global network */
665           tpaw_irc_network_manager_remove (mgr, network);
666           network_modified[2] = TRUE;
667         }
668       else if (strcmp (name, "Undernet") == 0)
669         {
670           /* modify global network */
671           server = tpaw_irc_server_new ("us.undernet.org", 6667, FALSE);
672           tpaw_irc_network_append_server (network, server);
673           g_object_unref (server);
674
675           network_modified[3] = TRUE;
676         }
677       else if (strcmp (name, "Another Server") == 0)
678         {
679           /* Don't change this one */
680         }
681       else
682         {
683           g_assert_not_reached ();
684         }
685
686       g_free (name);
687     }
688   g_assert (network_modified[0] && network_modified[1] && network_modified[2]
689       && network_modified[3]);
690
691   /* Add a new network */
692   network = tpaw_irc_network_new ("Great Server");
693   server = tpaw_irc_server_new ("irc.greatserver.com", 7873, TRUE);
694   tpaw_irc_network_append_server (network, server);
695   tpaw_irc_network_manager_add (mgr, network);
696   g_object_unref (server);
697   g_object_unref (network);
698
699   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
700   g_slist_free (networks);
701   g_object_unref (mgr);
702
703
704   /* Now let's reload the file and check its contain */
705   global_file_orig = get_xml_file (GLOBAL_SAMPLE);
706   user_file_orig = get_user_xml_file (USER_FILE);
707   mgr = tpaw_irc_network_manager_new (global_file_orig, user_file_orig);
708   g_free (global_file_orig);
709   g_free (user_file_orig);
710
711   networks = tpaw_irc_network_manager_get_networks (mgr);
712   g_assert_cmpuint (g_slist_length (networks), ==, 4);
713
714   network_checked[0] = network_checked[1] = network_checked[2] =
715     network_checked[3] = FALSE;
716   /* check networks and servers */
717   for (l = networks; l != NULL; l = g_slist_next (l))
718     {
719       gchar *name;
720
721       g_object_get (l->data, "name", &name, NULL);
722       g_assert (name != NULL);
723
724       if (strcmp (name, "GIMPNet") == 0)
725         {
726           check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 2);
727           network_checked[0] = TRUE;
728         }
729       else if (strcmp (name, "Great Server") == 0)
730         {
731           check_network (l->data, "Great Server", "UTF-8", great_server, 1);
732           network_checked[1] = TRUE;
733         }
734       else if (strcmp (name, "Another Server") == 0)
735         {
736           check_network (l->data, "Another Server", "UTF-8", another_server, 1);
737           network_checked[2] = TRUE;
738         }
739       else if (strcmp (name, "Undernet") == 0)
740         {
741           check_network (l->data, "Undernet", "UTF-8", undernet_servers, 2);
742           network_checked[3] = TRUE;
743         }
744       else
745         {
746           g_assert_not_reached ();
747         }
748
749       g_free (name);
750     }
751   g_assert (network_checked[0] && network_checked[1] && network_checked[2] &&
752       network_checked[3]);
753
754   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
755   g_slist_free (networks);
756   g_object_unref (mgr);
757 }
758
759 static void
760 test_tpaw_irc_network_manager_find_network_by_address (void)
761 {
762   TpawIrcNetworkManager *mgr;
763   TpawIrcNetwork *network;
764   struct server_t freenode_servers[] = {
765     { "irc.freenode.net", 6667, FALSE },
766     { "irc.eu.freenode.net", 6667, FALSE }};
767   gchar *global_file_orig;
768
769   global_file_orig = get_xml_file (GLOBAL_SAMPLE);
770   mgr = tpaw_irc_network_manager_new (global_file_orig, NULL);
771   g_free (global_file_orig);
772
773   network = tpaw_irc_network_manager_find_network_by_address (mgr,
774       "irc.freenode.net");
775   g_assert (network != NULL);
776   check_network (network, "Freenode", "UTF-8", freenode_servers, 2);
777
778   network = tpaw_irc_network_manager_find_network_by_address (mgr,
779       "irc.eu.freenode.net");
780   g_assert (network != NULL);
781   check_network (network, "Freenode", "UTF-8", freenode_servers, 2);
782
783   network = tpaw_irc_network_manager_find_network_by_address (mgr,
784       "unknown");
785   g_assert (network == NULL);
786
787   g_object_unref (mgr);
788 }
789
790 static void
791 test_no_modify_with_empty_user_file (void)
792 {
793   TpawIrcNetworkManager *mgr;
794   GSList *networks;
795   gchar *global_file_orig;
796   gchar *user_file_orig;
797
798   /* user don't have a networks file yet */
799   user_file_orig = get_user_xml_file (USER_FILE);
800   g_unlink (user_file_orig);
801
802   global_file_orig = get_xml_file (GLOBAL_SAMPLE);
803   mgr = tpaw_irc_network_manager_new (global_file_orig, user_file_orig);
804   g_free (global_file_orig);
805   g_object_unref (mgr);
806
807   /* We didn't modify anything so USER_FILE should be empty */
808   mgr = tpaw_irc_network_manager_new (NULL, user_file_orig);
809   g_free (user_file_orig);
810
811   networks = tpaw_irc_network_manager_get_networks (mgr);
812   g_assert_cmpuint (g_slist_length (networks), ==, 0);
813
814   g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
815   g_slist_free (networks);
816   g_object_unref (mgr);
817 }
818
819 int
820 main (int argc,
821     char **argv)
822 {
823   int result;
824
825   test_init (argc, argv);
826
827   g_test_add_func ("/irc-network-manager/add",
828       test_tpaw_irc_network_manager_add);
829   g_test_add_func ("/irc-network-manager/load-global-file",
830       test_load_global_file);
831   g_test_add_func ("/irc-network-manager/remove",
832       test_tpaw_irc_network_manager_remove);
833   g_test_add_func ("/irc-network-manager/load-user-file", test_load_user_file);
834   g_test_add_func ("/irc-network-manager/load-both-files",
835       test_load_both_files);
836   g_test_add_func ("/irc-network-manager/modify-user-file",
837       test_modify_user_file);
838   g_test_add_func ("/irc-network-manager/modify-both-files",
839       test_modify_both_files);
840   g_test_add_func ("/irc-network-manager/find-network-by-address",
841       test_tpaw_irc_network_manager_find_network_by_address);
842   g_test_add_func ("/irc-network-manager/no-modify-with-empty-user-file",
843       test_no_modify_with_empty_user_file);
844
845   result = g_test_run ();
846   test_deinit ();
847   return result;
848 }