start dev of next release
[empathy-mirror.git] / tests / empathy-irc-network-test.c
blob313ab0651835236684204869a3f12e85c2a98859
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
5 #include "test-irc-helper.h"
6 #include "test-helper.h"
8 #include <libempathy/empathy-irc-network.h>
10 static void
11 test_empathy_irc_network_new (void)
13 EmpathyIrcNetwork *network;
15 network = empathy_irc_network_new ("Network1");
16 check_network (network, "Network1", "UTF-8", NULL, 0);
18 g_object_unref (network);
21 static void
22 test_property_change (void)
24 EmpathyIrcNetwork *network;
26 network = empathy_irc_network_new ("Network1");
27 check_network (network, "Network1", "UTF-8", NULL, 0);
29 g_object_set (network,
30 "name", "Network2",
31 "charset", "ISO-8859-1",
32 NULL);
34 check_network (network, "Network2", "ISO-8859-1", NULL, 0);
36 g_object_unref (network);
40 static gboolean modified;
42 static void
43 modified_cb (EmpathyIrcNetwork *network,
44 gpointer unused)
46 modified = TRUE;
49 static void
50 test_modified_signal (void)
52 EmpathyIrcNetwork *network;
54 network = empathy_irc_network_new ("Network1");
55 check_network (network, "Network1", "UTF-8", NULL, 0);
57 modified = FALSE;
58 g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
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);
66 g_object_unref (network);
69 static void
70 add_servers (EmpathyIrcNetwork *network,
71 struct server_t *servers,
72 guint nb_servers)
74 guint i;
76 for (i = 0; i < nb_servers; i ++)
78 EmpathyIrcServer *server;
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);
89 static void
90 test_add_server (void)
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 }};
105 network = empathy_irc_network_new ("Network1");
106 check_network (network, "Network1", "UTF-8", NULL, 0);
108 modified = FALSE;
109 g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
111 check_network (network, "Network1", "UTF-8", NULL, 0);
113 /* add the servers */
114 add_servers (network, test_servers, 4);
116 check_network (network, "Network1", "UTF-8", test_servers, 4);
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);
127 /* free the list */
128 g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
129 g_slist_free (servers);
131 /* The 3rd server should have disappear */
132 check_network (network, "Network1", "UTF-8", servers_without_3, 3);
134 g_object_unref (network);
137 static void
138 test_modified_signal_because_of_server (void)
140 EmpathyIrcNetwork *network;
141 EmpathyIrcServer *server;
143 network = empathy_irc_network_new ("Network1");
144 check_network (network, "Network1", "UTF-8", NULL, 0);
146 g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
148 server = empathy_irc_server_new ("server1", 6667, FALSE);
149 empathy_irc_network_append_server (network, server);
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);
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);
168 g_object_unref (network);
171 static void
172 test_empathy_irc_network_set_server_position (void)
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 }};
187 network = empathy_irc_network_new ("Network1");
188 check_network (network, "Network1", "UTF-8", NULL, 0);
190 modified = FALSE;
191 g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
193 /* add the servers */
194 add_servers (network, test_servers, 4);
195 check_network (network, "Network1", "UTF-8", test_servers, 4);
197 /* get servers list */
198 servers = empathy_irc_network_get_servers (network);
199 g_assert (g_slist_length (servers) == 4);
200 modified = FALSE;
202 /* server1 go to the last position */
203 empathy_irc_network_set_server_position (network, servers->data, -1);
205 /* server2 go to the first position */
206 l = servers->next;
207 empathy_irc_network_set_server_position (network, l->data, 0);
209 /* server3 go to the third position */
210 l = l->next;
211 empathy_irc_network_set_server_position (network, l->data, 2);
213 /* server4 go to the second position*/
214 l = l->next;
215 empathy_irc_network_set_server_position (network, l->data, 1);
217 g_assert (modified);
219 /* free the list */
220 g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
221 g_slist_free (servers);
223 /* Check if servers are sorted */
224 check_network (network, "Network1", "UTF-8", test_servers_sorted, 4);
228 main (int argc,
229 char **argv)
231 int result;
233 test_init (argc, argv);
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);
244 result = g_test_run ();
245 test_deinit ();
246 return result;