]> git.0d.be Git - empathy.git/blob - tests/empathy-irc-network-test.c
8e9e86bc52642efb7cd906a066c50e4c60d93a0a
[empathy.git] / tests / empathy-irc-network-test.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 #include "test-irc-helper.h"
6 #include "test-helper.h"
7
8 #include "libempathy/empathy-irc-network.h"
9
10 static void
11 test_empathy_irc_network_new (void)
12 {
13   EmpathyIrcNetwork *network;
14
15   network = empathy_irc_network_new ("Network1");
16   check_network (network, "Network1", "UTF-8", NULL, 0);
17
18   g_object_unref (network);
19 }
20
21 static void
22 test_property_change (void)
23 {
24   EmpathyIrcNetwork *network;
25
26   network = empathy_irc_network_new ("Network1");
27   check_network (network, "Network1", "UTF-8", NULL, 0);
28
29   g_object_set (network,
30       "name", "Network2",
31       "charset", "ISO-8859-1",
32       NULL);
33
34   check_network (network, "Network2", "ISO-8859-1", NULL, 0);
35
36   g_object_unref (network);
37
38 }
39
40 static gboolean modified;
41
42 static void
43 modified_cb (EmpathyIrcNetwork *network,
44              gpointer unused)
45 {
46   modified = TRUE;
47 }
48
49 static void
50 test_modified_signal (void)
51 {
52   EmpathyIrcNetwork *network;
53
54   network = empathy_irc_network_new ("Network1");
55   check_network (network, "Network1", "UTF-8", NULL, 0);
56
57   modified = FALSE;
58   g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
59
60   g_object_set (network, "name", "Network2", NULL);
61   g_assert (modified);
62   modified = FALSE;
63   g_object_set (network, "name", "Network2", NULL);
64   g_assert (!modified);
65
66   g_object_unref (network);
67 }
68
69 static void
70 add_servers (EmpathyIrcNetwork *network,
71              struct server_t *servers,
72              guint nb_servers)
73 {
74   guint i;
75
76   for (i = 0; i < nb_servers; i ++)
77     {
78       EmpathyIrcServer *server;
79
80       server = empathy_irc_server_new (servers[i].address,
81           servers[i].port, servers[i].ssl);
82       modified = FALSE;
83       empathy_irc_network_append_server (network, server);
84       g_assert (modified);
85       g_object_unref (server);
86     }
87 }
88
89 static void
90 test_add_server (void)
91 {
92   EmpathyIrcNetwork *network;
93   EmpathyIrcServer *server;
94   GSList *servers, *l;
95   struct server_t test_servers[] = {
96     { "server1", 6667, FALSE },
97     { "server2", 6668, TRUE },
98     { "server3", 6667, FALSE },
99     { "server4", 6669, TRUE }};
100   struct server_t servers_without_3[] = {
101     { "server1", 6667, FALSE },
102     { "server2", 6668, TRUE },
103     { "server4", 6669, TRUE }};
104
105   network = empathy_irc_network_new ("Network1");
106   check_network (network, "Network1", "UTF-8", NULL, 0);
107
108   modified = FALSE;
109   g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
110
111   check_network (network, "Network1", "UTF-8", NULL, 0);
112
113   /* add the servers */
114   add_servers (network, test_servers, 4);
115
116   check_network (network, "Network1", "UTF-8", test_servers, 4);
117
118   /* Now let's remove the 3rd server */
119   servers = empathy_irc_network_get_servers (network);
120   l = g_slist_nth (servers, 2);
121   g_assert (l != NULL);
122   server = l->data;
123   modified = FALSE;
124   empathy_irc_network_remove_server (network, server);
125   g_assert (modified);
126
127   /* free the list */
128   g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
129   g_slist_free (servers);
130
131   /* The 3rd server should have disappear */
132   check_network (network, "Network1", "UTF-8", servers_without_3, 3);
133
134   g_object_unref (network);
135 }
136
137 static void
138 test_modified_signal_because_of_server (void)
139 {
140   EmpathyIrcNetwork *network;
141   EmpathyIrcServer *server;
142
143   network = empathy_irc_network_new ("Network1");
144   check_network (network, "Network1", "UTF-8", NULL, 0);
145
146   g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
147
148   server = empathy_irc_server_new ("server1", 6667, FALSE);
149   empathy_irc_network_append_server (network, server);
150
151   /* Change server properties */
152   modified = FALSE;
153   g_object_set (server, "address", "server2", NULL);
154   g_assert (modified);
155   modified = FALSE;
156   g_object_set (server, "port", 6668, NULL);
157   g_assert (modified);
158   modified = FALSE;
159   g_object_set (server, "ssl", TRUE, NULL);
160   g_assert (modified);
161
162   empathy_irc_network_remove_server (network, server);
163   modified = FALSE;
164   g_object_set (server, "address", "server3", NULL);
165   /* We removed the server so the network is not modified anymore */
166   g_assert (!modified);
167
168   g_object_unref (network);
169 }
170
171 static void
172 test_empathy_irc_network_set_server_position (void)
173 {
174   EmpathyIrcNetwork *network;
175   GSList *servers, *l;
176   struct server_t test_servers[] = {
177     { "server1", 6667, FALSE },
178     { "server2", 6668, TRUE },
179     { "server3", 6667, FALSE },
180     { "server4", 6669, TRUE }};
181   struct server_t test_servers_sorted[] = {
182     { "server2", 6668, TRUE },
183     { "server4", 6669, TRUE },
184     { "server3", 6667, FALSE },
185     { "server1", 6667, FALSE }};
186
187   network = empathy_irc_network_new ("Network1");
188   check_network (network, "Network1", "UTF-8", NULL, 0);
189
190   modified = FALSE;
191   g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
192
193   /* add the servers */
194   add_servers (network, test_servers, 4);
195   check_network (network, "Network1", "UTF-8", test_servers, 4);
196
197   /* get servers list */
198   servers = empathy_irc_network_get_servers (network);
199   g_assert (g_slist_length (servers) == 4);
200   modified = FALSE;
201
202   /* server1 go to the last position */
203   empathy_irc_network_set_server_position (network, servers->data, -1);
204
205   /* server2 go to the first position */
206   l = servers->next;
207   empathy_irc_network_set_server_position (network, l->data, 0);
208
209   /* server3 go to the third position */
210   l = l->next;
211   empathy_irc_network_set_server_position (network, l->data, 2);
212
213   /* server4 go to the second position*/
214   l = l->next;
215   empathy_irc_network_set_server_position (network, l->data, 1);
216
217   g_assert (modified);
218
219   /* free the list */
220   g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
221   g_slist_free (servers);
222
223   /* Check if servers are sorted */
224   check_network (network, "Network1", "UTF-8", test_servers_sorted, 4);
225 }
226
227 int
228 main (int argc,
229     char **argv)
230 {
231   int result;
232
233   test_init (argc, argv);
234
235   g_test_add_func ("/irc-network/new", test_empathy_irc_network_new);
236   g_test_add_func ("/irc-network/property-change", test_property_change);
237   g_test_add_func ("/irc-network/modified-signal", test_modified_signal);
238   g_test_add_func ("/irc-network/add-server", test_add_server);
239   g_test_add_func ("/irc-network/modified-signal-because-of-server",
240       test_modified_signal_because_of_server);
241   g_test_add_func ("/irc-network/set-server-position",
242       test_empathy_irc_network_set_server_position);
243
244   result = g_test_run ();
245   test_deinit ();
246   return result;
247 }