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