4 #include <glib/gstdio.h>
5 #include <telepathy-glib/telepathy-glib.h>
7 #include "empathy-chatroom-manager.h"
8 #include "test-helper.h"
10 #define CHATROOM_SAMPLE "chatrooms-sample.xml"
11 #define CHATROOM_FILE "chatrooms.xml"
15 check_chatroom (EmpathyChatroom *chatroom,
18 gboolean auto_connect,
23 fail_if (tp_strdiff (empathy_chatroom_get_name (chatroom), name));
24 fail_if (tp_strdiff (empathy_chatroom_get_room (chatroom), room));
25 fail_if (empathy_chatroom_get_auto_connect (chatroom) != auto_connect);
26 g_object_get (chatroom, "favorite", &_favorite, NULL);
27 fail_if (favorite != _favorite);
34 gboolean auto_connect;
39 check_chatrooms_list (EmpathyChatroomManager *mgr,
40 EmpathyAccount *account,
41 struct chatroom_t *_chatrooms,
48 fail_if (empathy_chatroom_manager_get_count (mgr, account) != nb_chatrooms);
50 found = g_hash_table_new (g_str_hash, g_str_equal);
51 for (i = 0; i < nb_chatrooms; i++)
53 g_hash_table_insert (found, _chatrooms[i].room, &_chatrooms[i]);
56 chatrooms = empathy_chatroom_manager_get_chatrooms (mgr, account);
57 fail_if (g_list_length (chatrooms) != nb_chatrooms);
59 for (l = chatrooms; l != NULL; l = g_list_next (l))
61 EmpathyChatroom *chatroom = l->data;
62 struct chatroom_t *tmp;
64 tmp = g_hash_table_lookup (found, empathy_chatroom_get_room (chatroom));
65 fail_if (tmp == NULL);
67 check_chatroom (chatroom, tmp->name, tmp->room, tmp->auto_connect,
70 g_hash_table_remove (found, empathy_chatroom_get_room (chatroom));
73 fail_if (g_hash_table_size (found) != 0);
75 g_list_free (chatrooms);
76 g_hash_table_unref (found);
80 change_account_name_in_file (EmpathyAccount *account,
85 cmd = g_strdup_printf ("sed -i 's/CHANGE_ME/%s/' %s",
86 empathy_account_get_unique_name (account), file);
88 if (system (cmd) == -1)
90 g_print ("'%s' call failed\n", cmd);
99 START_TEST (test_empathy_chatroom_manager_dup_singleton)
101 EmpathyChatroomManager *mgr;
103 EmpathyAccount *account;
104 EmpathyAccountManager *account_manager;
105 struct chatroom_t chatrooms[] = {
106 { "name1", "room1", TRUE, TRUE },
107 { "name2", "room2", FALSE, TRUE }};
109 account_manager = tp_account_manager_dup ();
110 account = get_test_account ();
112 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
114 file = get_user_xml_file (CHATROOM_FILE);
116 /* change the chatrooms XML file to use the account we just created */
117 if (!change_account_name_in_file (account, file))
120 mgr = empathy_chatroom_manager_dup_singleton (file);
121 check_chatrooms_list (mgr, account, chatrooms, 2);
124 g_object_unref (mgr);
125 g_object_unref (account_manager);
126 g_object_unref (account);
130 START_TEST (test_empathy_chatroom_manager_add)
132 EmpathyChatroomManager *mgr;
134 EmpathyAccount *account;
135 EmpathyAccountManager *account_manager;
136 struct chatroom_t chatrooms[] = {
137 { "name1", "room1", TRUE, TRUE },
138 { "name2", "room2", FALSE, TRUE },
139 { "name3", "room3", FALSE, TRUE },
140 { "name4", "room4", FALSE, FALSE }};
141 EmpathyChatroom *chatroom;
143 account_manager = tp_account_manager_dup ();
145 account = get_test_account ();
147 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
149 file = get_user_xml_file (CHATROOM_FILE);
151 /* change the chatrooms XML file to use the account we just created */
152 fail_unless (change_account_name_in_file (account, file));
154 mgr = empathy_chatroom_manager_dup_singleton (file);
156 /* add a favorite chatroom */
157 chatroom = empathy_chatroom_new_full (account, "room3", "name3", FALSE);
158 g_object_set (chatroom, "favorite", TRUE, NULL);
159 empathy_chatroom_manager_add (mgr, chatroom);
160 g_object_unref (chatroom);
162 check_chatrooms_list (mgr, account, chatrooms, 3);
164 /* reload chatrooms file */
165 g_object_unref (mgr);
166 mgr = empathy_chatroom_manager_dup_singleton (file);
168 /* chatroom has been added to the XML file as it's a favorite */
169 check_chatrooms_list (mgr, account, chatrooms, 3);
171 /* add a non favorite chatroom */
172 chatroom = empathy_chatroom_new_full (account, "room4", "name4", FALSE);
173 g_object_set (chatroom, "favorite", FALSE, NULL);
174 empathy_chatroom_manager_add (mgr, chatroom);
175 g_object_unref (chatroom);
177 check_chatrooms_list (mgr, account, chatrooms, 4);
179 /* reload chatrooms file */
180 g_object_unref (mgr);
181 mgr = empathy_chatroom_manager_dup_singleton (file);
183 /* chatrooms has not been added to the XML file */
184 check_chatrooms_list (mgr, account, chatrooms, 3);
186 g_object_unref (mgr);
188 g_object_unref (account_manager);
189 g_object_unref (account);
193 START_TEST (test_empathy_chatroom_manager_remove)
195 EmpathyChatroomManager *mgr;
197 EmpathyAccount *account;
198 struct chatroom_t chatrooms[] = {
199 { "name2", "room2", FALSE, TRUE }};
200 EmpathyChatroom *chatroom;
201 EmpathyAccountManager *account_mgr;
203 account_mgr = tp_account_manager_dup ();
204 account = get_test_account ();
206 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
208 file = get_user_xml_file (CHATROOM_FILE);
210 /* change the chatrooms XML file to use the account we just created */
211 fail_unless (change_account_name_in_file (account, file));
213 mgr = empathy_chatroom_manager_dup_singleton (file);
216 chatroom = empathy_chatroom_manager_find (mgr, account, "room1");
217 fail_if (chatroom == NULL);
218 empathy_chatroom_manager_remove (mgr, chatroom);
220 check_chatrooms_list (mgr, account, chatrooms, 1);
222 /* reload chatrooms file */
223 g_object_unref (mgr);
224 mgr = empathy_chatroom_manager_dup_singleton (file);
226 check_chatrooms_list (mgr, account, chatrooms, 1);
229 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
230 fail_if (chatroom == NULL);
232 empathy_chatroom_manager_remove (mgr, chatroom);
234 check_chatrooms_list (mgr, account, chatrooms, 0);
236 /* reload chatrooms file */
237 g_object_unref (mgr);
238 mgr = empathy_chatroom_manager_dup_singleton (file);
240 check_chatrooms_list (mgr, account, chatrooms, 0);
242 g_object_unref (mgr);
244 g_object_unref (account);
245 g_object_unref (account_mgr);
249 START_TEST (test_empathy_chatroom_manager_change_favorite)
251 EmpathyChatroomManager *mgr;
253 EmpathyAccount *account;
254 EmpathyAccountManager *account_manager;
255 struct chatroom_t chatrooms[] = {
256 { "name1", "room1", TRUE, TRUE },
257 { "name2", "room2", FALSE, FALSE }};
258 EmpathyChatroom *chatroom;
260 account_manager = tp_account_manager_dup ();
261 account = get_test_account ();
263 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
265 file = get_user_xml_file (CHATROOM_FILE);
267 /* change the chatrooms XML file to use the account we just created */
268 fail_unless (change_account_name_in_file (account, file));
270 mgr = empathy_chatroom_manager_dup_singleton (file);
272 /* room2 is not favorite anymore */
273 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
274 fail_if (chatroom == NULL);
275 g_object_set (chatroom, "favorite", FALSE, NULL);
277 check_chatrooms_list (mgr, account, chatrooms, 2);
279 /* reload chatrooms file */
280 g_object_unref (mgr);
281 mgr = empathy_chatroom_manager_dup_singleton (file);
283 /* room2 is not present in the XML file anymore as it's not a favorite */
284 check_chatrooms_list (mgr, account, chatrooms, 1);
287 chatroom = empathy_chatroom_new_full (account, "room2", "name2", FALSE);
288 empathy_chatroom_manager_add (mgr, chatroom);
290 check_chatrooms_list (mgr, account, chatrooms, 2);
292 /* set room2 as favorite */
293 g_object_set (chatroom, "favorite", TRUE, NULL);
295 chatrooms[1].favorite = TRUE;
296 check_chatrooms_list (mgr, account, chatrooms, 2);
298 /* reload chatrooms file */
299 g_object_unref (mgr);
300 mgr = empathy_chatroom_manager_dup_singleton (file);
302 /* room2 is back in the XML file now */
303 check_chatrooms_list (mgr, account, chatrooms, 2);
305 g_object_unref (mgr);
306 g_object_unref (chatroom);
308 g_object_unref (account_manager);
309 g_object_unref (account);
313 START_TEST (test_empathy_chatroom_manager_change_chatroom)
315 EmpathyChatroomManager *mgr;
317 EmpathyAccount *account;
318 EmpathyAccountManager *account_manager;
319 struct chatroom_t chatrooms[] = {
320 { "name1", "room1", TRUE, TRUE },
321 { "name2", "room2", FALSE, TRUE }};
322 EmpathyChatroom *chatroom;
324 account_manager = tp_account_manager_dup ();
325 account = get_test_account ();
327 copy_xml_file (CHATROOM_SAMPLE, "foo.xml");
329 file = get_user_xml_file ("foo.xml");
331 /* change the chatrooms XML file to use the account we just created */
332 fail_unless (change_account_name_in_file (account, file));
334 mgr = empathy_chatroom_manager_dup_singleton (file);
336 check_chatrooms_list (mgr, account, chatrooms, 2);
338 /* change room2 name */
339 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
340 fail_if (chatroom == NULL);
341 empathy_chatroom_set_name (chatroom, "new_name");
343 /* reload chatrooms file */
344 g_object_unref (mgr);
345 mgr = empathy_chatroom_manager_dup_singleton (file);
347 chatrooms[1].name = "new_name";
348 check_chatrooms_list (mgr, account, chatrooms, 2);
350 /* change room2 auto-connect status */
351 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
352 fail_if (chatroom == NULL);
353 empathy_chatroom_set_auto_connect (chatroom, TRUE);
355 /* reload chatrooms file */
356 g_object_unref (mgr);
357 mgr = empathy_chatroom_manager_dup_singleton (file);
359 chatrooms[1].auto_connect = TRUE;
360 check_chatrooms_list (mgr, account, chatrooms, 2);
362 /* change room2 room */
363 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
364 fail_if (chatroom == NULL);
365 empathy_chatroom_set_room (chatroom, "new_room");
367 /* reload chatrooms file */
368 g_object_unref (mgr);
369 mgr = empathy_chatroom_manager_dup_singleton (file);
371 chatrooms[1].room = "new_room";
372 check_chatrooms_list (mgr, account, chatrooms, 2);
374 g_object_unref (mgr);
376 g_object_unref (account);
377 g_object_unref (account_manager);
388 test_init (argc, argv);
391 g_test_add_func ("/chatroom-manager/dup-singleton",
392 test_empathy_chatroom_manager_dup_singleton);
393 g_test_add_func ("/chatroom-manager/add", test_empathy_chatroom_manager_add);
394 g_test_add_func ("/chatroom-manager/remove",
395 test_empathy_chatroom_manager_remove);
396 g_test_add_func ("/chatroom-manager/change-favorite",
397 test_empathy_chatroom_manager_change_favorite);
398 g_test_add_func ("/chatroom-manager/change-chatroom",
399 test_empathy_chatroom_manager_change_chatroom);
402 result = g_test_run ();