4 #include <glib/gstdio.h>
6 #include <telepathy-glib/telepathy-glib.h>
8 #include <libempathy/empathy-chatroom-manager.h>
10 #include "test-helper.h"
12 #define CHATROOM_SAMPLE "chatrooms-sample.xml"
13 #define CHATROOM_FILE "chatrooms.xml"
17 check_chatroom (EmpathyChatroom *chatroom,
20 gboolean auto_connect,
25 fail_if (tp_strdiff (empathy_chatroom_get_name (chatroom), name));
26 fail_if (tp_strdiff (empathy_chatroom_get_room (chatroom), room));
27 fail_if (empathy_chatroom_get_auto_connect (chatroom) != auto_connect);
28 g_object_get (chatroom, "favorite", &_favorite, NULL);
29 fail_if (favorite != _favorite);
36 gboolean auto_connect;
41 check_chatrooms_list (EmpathyChatroomManager *mgr,
42 EmpathyAccount *account,
43 struct chatroom_t *_chatrooms,
50 fail_if (empathy_chatroom_manager_get_count (mgr, account) != nb_chatrooms);
52 found = g_hash_table_new (g_str_hash, g_str_equal);
53 for (i = 0; i < nb_chatrooms; i++)
55 g_hash_table_insert (found, _chatrooms[i].room, &_chatrooms[i]);
58 chatrooms = empathy_chatroom_manager_get_chatrooms (mgr, account);
59 fail_if (g_list_length (chatrooms) != nb_chatrooms);
61 for (l = chatrooms; l != NULL; l = g_list_next (l))
63 EmpathyChatroom *chatroom = l->data;
64 struct chatroom_t *tmp;
66 tmp = g_hash_table_lookup (found, empathy_chatroom_get_room (chatroom));
67 fail_if (tmp == NULL);
69 check_chatroom (chatroom, tmp->name, tmp->room, tmp->auto_connect,
72 g_hash_table_remove (found, empathy_chatroom_get_room (chatroom));
75 fail_if (g_hash_table_size (found) != 0);
77 g_list_free (chatrooms);
78 g_hash_table_unref (found);
82 change_account_name_in_file (EmpathyAccount *account,
87 cmd = g_strdup_printf ("sed -i 's/CHANGE_ME/%s/' %s",
88 empathy_account_get_unique_name (account), file);
90 if (system (cmd) == -1)
92 g_print ("'%s' call failed\n", cmd);
101 START_TEST (test_empathy_chatroom_manager_dup_singleton)
103 EmpathyChatroomManager *mgr;
105 EmpathyAccount *account;
106 EmpathyAccountManager *account_manager;
107 struct chatroom_t chatrooms[] = {
108 { "name1", "room1", TRUE, TRUE },
109 { "name2", "room2", FALSE, TRUE }};
111 account_manager = tp_account_manager_dup ();
112 account = get_test_account ();
114 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
116 file = get_user_xml_file (CHATROOM_FILE);
118 /* change the chatrooms XML file to use the account we just created */
119 if (!change_account_name_in_file (account, file))
122 mgr = empathy_chatroom_manager_dup_singleton (file);
123 check_chatrooms_list (mgr, account, chatrooms, 2);
126 g_object_unref (mgr);
127 g_object_unref (account_manager);
128 g_object_unref (account);
132 START_TEST (test_empathy_chatroom_manager_add)
134 EmpathyChatroomManager *mgr;
136 EmpathyAccount *account;
137 EmpathyAccountManager *account_manager;
138 struct chatroom_t chatrooms[] = {
139 { "name1", "room1", TRUE, TRUE },
140 { "name2", "room2", FALSE, TRUE },
141 { "name3", "room3", FALSE, TRUE },
142 { "name4", "room4", FALSE, FALSE }};
143 EmpathyChatroom *chatroom;
145 account_manager = tp_account_manager_dup ();
147 account = get_test_account ();
149 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
151 file = get_user_xml_file (CHATROOM_FILE);
153 /* change the chatrooms XML file to use the account we just created */
154 fail_unless (change_account_name_in_file (account, file));
156 mgr = empathy_chatroom_manager_dup_singleton (file);
158 /* add a favorite chatroom */
159 chatroom = empathy_chatroom_new_full (account, "room3", "name3", FALSE);
160 g_object_set (chatroom, "favorite", TRUE, NULL);
161 empathy_chatroom_manager_add (mgr, chatroom);
162 g_object_unref (chatroom);
164 check_chatrooms_list (mgr, account, chatrooms, 3);
166 /* reload chatrooms file */
167 g_object_unref (mgr);
168 mgr = empathy_chatroom_manager_dup_singleton (file);
170 /* chatroom has been added to the XML file as it's a favorite */
171 check_chatrooms_list (mgr, account, chatrooms, 3);
173 /* add a non favorite chatroom */
174 chatroom = empathy_chatroom_new_full (account, "room4", "name4", FALSE);
175 g_object_set (chatroom, "favorite", FALSE, NULL);
176 empathy_chatroom_manager_add (mgr, chatroom);
177 g_object_unref (chatroom);
179 check_chatrooms_list (mgr, account, chatrooms, 4);
181 /* reload chatrooms file */
182 g_object_unref (mgr);
183 mgr = empathy_chatroom_manager_dup_singleton (file);
185 /* chatrooms has not been added to the XML file */
186 check_chatrooms_list (mgr, account, chatrooms, 3);
188 g_object_unref (mgr);
190 g_object_unref (account_manager);
191 g_object_unref (account);
195 START_TEST (test_empathy_chatroom_manager_remove)
197 EmpathyChatroomManager *mgr;
199 EmpathyAccount *account;
200 struct chatroom_t chatrooms[] = {
201 { "name2", "room2", FALSE, TRUE }};
202 EmpathyChatroom *chatroom;
203 EmpathyAccountManager *account_mgr;
205 account_mgr = tp_account_manager_dup ();
206 account = get_test_account ();
208 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
210 file = get_user_xml_file (CHATROOM_FILE);
212 /* change the chatrooms XML file to use the account we just created */
213 fail_unless (change_account_name_in_file (account, file));
215 mgr = empathy_chatroom_manager_dup_singleton (file);
218 chatroom = empathy_chatroom_manager_find (mgr, account, "room1");
219 fail_if (chatroom == NULL);
220 empathy_chatroom_manager_remove (mgr, chatroom);
222 check_chatrooms_list (mgr, account, chatrooms, 1);
224 /* reload chatrooms file */
225 g_object_unref (mgr);
226 mgr = empathy_chatroom_manager_dup_singleton (file);
228 check_chatrooms_list (mgr, account, chatrooms, 1);
231 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
232 fail_if (chatroom == NULL);
234 empathy_chatroom_manager_remove (mgr, chatroom);
236 check_chatrooms_list (mgr, account, chatrooms, 0);
238 /* reload chatrooms file */
239 g_object_unref (mgr);
240 mgr = empathy_chatroom_manager_dup_singleton (file);
242 check_chatrooms_list (mgr, account, chatrooms, 0);
244 g_object_unref (mgr);
246 g_object_unref (account);
247 g_object_unref (account_mgr);
251 START_TEST (test_empathy_chatroom_manager_change_favorite)
253 EmpathyChatroomManager *mgr;
255 EmpathyAccount *account;
256 EmpathyAccountManager *account_manager;
257 struct chatroom_t chatrooms[] = {
258 { "name1", "room1", TRUE, TRUE },
259 { "name2", "room2", FALSE, FALSE }};
260 EmpathyChatroom *chatroom;
262 account_manager = tp_account_manager_dup ();
263 account = get_test_account ();
265 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
267 file = get_user_xml_file (CHATROOM_FILE);
269 /* change the chatrooms XML file to use the account we just created */
270 fail_unless (change_account_name_in_file (account, file));
272 mgr = empathy_chatroom_manager_dup_singleton (file);
274 /* room2 is not favorite anymore */
275 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
276 fail_if (chatroom == NULL);
277 g_object_set (chatroom, "favorite", FALSE, NULL);
279 check_chatrooms_list (mgr, account, chatrooms, 2);
281 /* reload chatrooms file */
282 g_object_unref (mgr);
283 mgr = empathy_chatroom_manager_dup_singleton (file);
285 /* room2 is not present in the XML file anymore as it's not a favorite */
286 check_chatrooms_list (mgr, account, chatrooms, 1);
289 chatroom = empathy_chatroom_new_full (account, "room2", "name2", FALSE);
290 empathy_chatroom_manager_add (mgr, chatroom);
292 check_chatrooms_list (mgr, account, chatrooms, 2);
294 /* set room2 as favorite */
295 g_object_set (chatroom, "favorite", TRUE, NULL);
297 chatrooms[1].favorite = TRUE;
298 check_chatrooms_list (mgr, account, chatrooms, 2);
300 /* reload chatrooms file */
301 g_object_unref (mgr);
302 mgr = empathy_chatroom_manager_dup_singleton (file);
304 /* room2 is back in the XML file now */
305 check_chatrooms_list (mgr, account, chatrooms, 2);
307 g_object_unref (mgr);
308 g_object_unref (chatroom);
310 g_object_unref (account_manager);
311 g_object_unref (account);
315 START_TEST (test_empathy_chatroom_manager_change_chatroom)
317 EmpathyChatroomManager *mgr;
319 EmpathyAccount *account;
320 EmpathyAccountManager *account_manager;
321 struct chatroom_t chatrooms[] = {
322 { "name1", "room1", TRUE, TRUE },
323 { "name2", "room2", FALSE, TRUE }};
324 EmpathyChatroom *chatroom;
326 account_manager = tp_account_manager_dup ();
327 account = get_test_account ();
329 copy_xml_file (CHATROOM_SAMPLE, "foo.xml");
331 file = get_user_xml_file ("foo.xml");
333 /* change the chatrooms XML file to use the account we just created */
334 fail_unless (change_account_name_in_file (account, file));
336 mgr = empathy_chatroom_manager_dup_singleton (file);
338 check_chatrooms_list (mgr, account, chatrooms, 2);
340 /* change room2 name */
341 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
342 fail_if (chatroom == NULL);
343 empathy_chatroom_set_name (chatroom, "new_name");
345 /* reload chatrooms file */
346 g_object_unref (mgr);
347 mgr = empathy_chatroom_manager_dup_singleton (file);
349 chatrooms[1].name = "new_name";
350 check_chatrooms_list (mgr, account, chatrooms, 2);
352 /* change room2 auto-connect status */
353 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
354 fail_if (chatroom == NULL);
355 empathy_chatroom_set_auto_connect (chatroom, TRUE);
357 /* reload chatrooms file */
358 g_object_unref (mgr);
359 mgr = empathy_chatroom_manager_dup_singleton (file);
361 chatrooms[1].auto_connect = TRUE;
362 check_chatrooms_list (mgr, account, chatrooms, 2);
364 /* change room2 room */
365 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
366 fail_if (chatroom == NULL);
367 empathy_chatroom_set_room (chatroom, "new_room");
369 /* reload chatrooms file */
370 g_object_unref (mgr);
371 mgr = empathy_chatroom_manager_dup_singleton (file);
373 chatrooms[1].room = "new_room";
374 check_chatrooms_list (mgr, account, chatrooms, 2);
376 g_object_unref (mgr);
378 g_object_unref (account);
379 g_object_unref (account_manager);
390 test_init (argc, argv);
393 g_test_add_func ("/chatroom-manager/dup-singleton",
394 test_empathy_chatroom_manager_dup_singleton);
395 g_test_add_func ("/chatroom-manager/add", test_empathy_chatroom_manager_add);
396 g_test_add_func ("/chatroom-manager/remove",
397 test_empathy_chatroom_manager_remove);
398 g_test_add_func ("/chatroom-manager/change-favorite",
399 test_empathy_chatroom_manager_change_favorite);
400 g_test_add_func ("/chatroom-manager/change-chatroom",
401 test_empathy_chatroom_manager_change_chatroom);
404 result = g_test_run ();