1 #include "empathy-chatroom-manager.h"
2 #include "test-helper.h"
4 #define CHATROOM_SAMPLE "chatrooms-sample.xml"
5 #define CHATROOM_FILE "chatrooms.xml"
9 check_chatroom (EmpathyChatroom *chatroom,
12 gboolean auto_connect,
17 fail_if (tp_strdiff (empathy_chatroom_get_name (chatroom), name));
18 fail_if (tp_strdiff (empathy_chatroom_get_room (chatroom), room));
19 fail_if (empathy_chatroom_get_auto_connect (chatroom) != auto_connect);
20 g_object_get (chatroom, "favorite", &_favorite, NULL);
21 fail_if (favorite != _favorite);
28 gboolean auto_connect;
33 check_chatrooms_list (EmpathyChatroomManager *mgr,
34 EmpathyAccount *account,
35 struct chatroom_t *_chatrooms,
42 fail_if (empathy_chatroom_manager_get_count (mgr, account) != nb_chatrooms);
44 found = g_hash_table_new (g_str_hash, g_str_equal);
45 for (i = 0; i < nb_chatrooms; i++)
47 g_hash_table_insert (found, _chatrooms[i].room, &_chatrooms[i]);
50 chatrooms = empathy_chatroom_manager_get_chatrooms (mgr, account);
51 fail_if (g_list_length (chatrooms) != nb_chatrooms);
53 for (l = chatrooms; l != NULL; l = g_list_next (l))
55 EmpathyChatroom *chatroom = l->data;
56 struct chatroom_t *tmp;
58 tmp = g_hash_table_lookup (found, empathy_chatroom_get_room (chatroom));
59 fail_if (tmp == NULL);
61 check_chatroom (chatroom, tmp->name, tmp->room, tmp->auto_connect,
64 g_hash_table_remove (found, empathy_chatroom_get_room (chatroom));
67 fail_if (g_hash_table_size (found) != 0);
69 g_list_free (chatrooms);
70 g_hash_table_unref (found);
74 change_account_name_in_file (EmpathyAccount *account,
79 cmd = g_strdup_printf ("sed -i 's/CHANGE_ME/%s/' %s",
80 empathy_account_get_unique_name (account), file);
82 if (system (cmd) == -1)
84 g_print ("'%s' call failed\n", cmd);
93 START_TEST (test_empathy_chatroom_manager_dup_singleton)
95 EmpathyChatroomManager *mgr;
97 EmpathyAccount *account;
98 EmpathyAccountManager *account_manager;
99 struct chatroom_t chatrooms[] = {
100 { "name1", "room1", TRUE, TRUE },
101 { "name2", "room2", FALSE, TRUE }};
103 account_manager = tp_account_manager_dup ();
104 account = get_test_account ();
106 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
108 file = get_user_xml_file (CHATROOM_FILE);
110 /* change the chatrooms XML file to use the account we just created */
111 if (!change_account_name_in_file (account, file))
114 mgr = empathy_chatroom_manager_dup_singleton (file);
115 check_chatrooms_list (mgr, account, chatrooms, 2);
118 g_object_unref (mgr);
119 g_object_unref (account_manager);
120 g_object_unref (account);
124 START_TEST (test_empathy_chatroom_manager_add)
126 EmpathyChatroomManager *mgr;
128 EmpathyAccount *account;
129 EmpathyAccountManager *account_manager;
130 struct chatroom_t chatrooms[] = {
131 { "name1", "room1", TRUE, TRUE },
132 { "name2", "room2", FALSE, TRUE },
133 { "name3", "room3", FALSE, TRUE },
134 { "name4", "room4", FALSE, FALSE }};
135 EmpathyChatroom *chatroom;
137 account_manager = tp_account_manager_dup ();
139 account = get_test_account ();
141 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
143 file = get_user_xml_file (CHATROOM_FILE);
145 /* change the chatrooms XML file to use the account we just created */
146 fail_unless (change_account_name_in_file (account, file));
148 mgr = empathy_chatroom_manager_dup_singleton (file);
150 /* add a favorite chatroom */
151 chatroom = empathy_chatroom_new_full (account, "room3", "name3", FALSE);
152 g_object_set (chatroom, "favorite", TRUE, NULL);
153 empathy_chatroom_manager_add (mgr, chatroom);
154 g_object_unref (chatroom);
156 check_chatrooms_list (mgr, account, chatrooms, 3);
158 /* reload chatrooms file */
159 g_object_unref (mgr);
160 mgr = empathy_chatroom_manager_dup_singleton (file);
162 /* chatroom has been added to the XML file as it's a favorite */
163 check_chatrooms_list (mgr, account, chatrooms, 3);
165 /* add a non favorite chatroom */
166 chatroom = empathy_chatroom_new_full (account, "room4", "name4", FALSE);
167 g_object_set (chatroom, "favorite", FALSE, NULL);
168 empathy_chatroom_manager_add (mgr, chatroom);
169 g_object_unref (chatroom);
171 check_chatrooms_list (mgr, account, chatrooms, 4);
173 /* reload chatrooms file */
174 g_object_unref (mgr);
175 mgr = empathy_chatroom_manager_dup_singleton (file);
177 /* chatrooms has not been added to the XML file */
178 check_chatrooms_list (mgr, account, chatrooms, 3);
180 g_object_unref (mgr);
182 g_object_unref (account_manager);
183 g_object_unref (account);
187 START_TEST (test_empathy_chatroom_manager_remove)
189 EmpathyChatroomManager *mgr;
191 EmpathyAccount *account;
192 struct chatroom_t chatrooms[] = {
193 { "name2", "room2", FALSE, TRUE }};
194 EmpathyChatroom *chatroom;
195 EmpathyAccountManager *account_mgr;
197 account_mgr = tp_account_manager_dup ();
198 account = get_test_account ();
200 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
202 file = get_user_xml_file (CHATROOM_FILE);
204 /* change the chatrooms XML file to use the account we just created */
205 fail_unless (change_account_name_in_file (account, file));
207 mgr = empathy_chatroom_manager_dup_singleton (file);
210 chatroom = empathy_chatroom_manager_find (mgr, account, "room1");
211 fail_if (chatroom == NULL);
212 empathy_chatroom_manager_remove (mgr, chatroom);
214 check_chatrooms_list (mgr, account, chatrooms, 1);
216 /* reload chatrooms file */
217 g_object_unref (mgr);
218 mgr = empathy_chatroom_manager_dup_singleton (file);
220 check_chatrooms_list (mgr, account, chatrooms, 1);
223 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
224 fail_if (chatroom == NULL);
226 empathy_chatroom_manager_remove (mgr, chatroom);
228 check_chatrooms_list (mgr, account, chatrooms, 0);
230 /* reload chatrooms file */
231 g_object_unref (mgr);
232 mgr = empathy_chatroom_manager_dup_singleton (file);
234 check_chatrooms_list (mgr, account, chatrooms, 0);
236 g_object_unref (mgr);
238 g_object_unref (account);
239 g_object_unref (account_mgr);
243 START_TEST (test_empathy_chatroom_manager_change_favorite)
245 EmpathyChatroomManager *mgr;
247 EmpathyAccount *account;
248 EmpathyAccountManager *account_manager;
249 struct chatroom_t chatrooms[] = {
250 { "name1", "room1", TRUE, TRUE },
251 { "name2", "room2", FALSE, FALSE }};
252 EmpathyChatroom *chatroom;
254 account_manager = tp_account_manager_dup ();
255 account = get_test_account ();
257 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
259 file = get_user_xml_file (CHATROOM_FILE);
261 /* change the chatrooms XML file to use the account we just created */
262 fail_unless (change_account_name_in_file (account, file));
264 mgr = empathy_chatroom_manager_dup_singleton (file);
266 /* room2 is not favorite anymore */
267 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
268 fail_if (chatroom == NULL);
269 g_object_set (chatroom, "favorite", FALSE, NULL);
271 check_chatrooms_list (mgr, account, chatrooms, 2);
273 /* reload chatrooms file */
274 g_object_unref (mgr);
275 mgr = empathy_chatroom_manager_dup_singleton (file);
277 /* room2 is not present in the XML file anymore as it's not a favorite */
278 check_chatrooms_list (mgr, account, chatrooms, 1);
281 chatroom = empathy_chatroom_new_full (account, "room2", "name2", FALSE);
282 empathy_chatroom_manager_add (mgr, chatroom);
284 check_chatrooms_list (mgr, account, chatrooms, 2);
286 /* set room2 as favorite */
287 g_object_set (chatroom, "favorite", TRUE, NULL);
289 chatrooms[1].favorite = TRUE;
290 check_chatrooms_list (mgr, account, chatrooms, 2);
292 /* reload chatrooms file */
293 g_object_unref (mgr);
294 mgr = empathy_chatroom_manager_dup_singleton (file);
296 /* room2 is back in the XML file now */
297 check_chatrooms_list (mgr, account, chatrooms, 2);
299 g_object_unref (mgr);
300 g_object_unref (chatroom);
302 g_object_unref (account_manager);
303 g_object_unref (account);
307 START_TEST (test_empathy_chatroom_manager_change_chatroom)
309 EmpathyChatroomManager *mgr;
311 EmpathyAccount *account;
312 EmpathyAccountManager *account_manager;
313 struct chatroom_t chatrooms[] = {
314 { "name1", "room1", TRUE, TRUE },
315 { "name2", "room2", FALSE, TRUE }};
316 EmpathyChatroom *chatroom;
318 account_manager = tp_account_manager_dup ();
319 account = get_test_account ();
321 copy_xml_file (CHATROOM_SAMPLE, "foo.xml");
323 file = get_user_xml_file ("foo.xml");
325 /* change the chatrooms XML file to use the account we just created */
326 fail_unless (change_account_name_in_file (account, file));
328 mgr = empathy_chatroom_manager_dup_singleton (file);
330 check_chatrooms_list (mgr, account, chatrooms, 2);
332 /* change room2 name */
333 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
334 fail_if (chatroom == NULL);
335 empathy_chatroom_set_name (chatroom, "new_name");
337 /* reload chatrooms file */
338 g_object_unref (mgr);
339 mgr = empathy_chatroom_manager_dup_singleton (file);
341 chatrooms[1].name = "new_name";
342 check_chatrooms_list (mgr, account, chatrooms, 2);
344 /* change room2 auto-connect status */
345 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
346 fail_if (chatroom == NULL);
347 empathy_chatroom_set_auto_connect (chatroom, TRUE);
349 /* reload chatrooms file */
350 g_object_unref (mgr);
351 mgr = empathy_chatroom_manager_dup_singleton (file);
353 chatrooms[1].auto_connect = TRUE;
354 check_chatrooms_list (mgr, account, chatrooms, 2);
356 /* change room2 room */
357 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
358 fail_if (chatroom == NULL);
359 empathy_chatroom_set_room (chatroom, "new_room");
361 /* reload chatrooms file */
362 g_object_unref (mgr);
363 mgr = empathy_chatroom_manager_dup_singleton (file);
365 chatrooms[1].room = "new_room";
366 check_chatrooms_list (mgr, account, chatrooms, 2);
368 g_object_unref (mgr);
370 g_object_unref (account);
371 g_object_unref (account_manager);
382 test_init (argc, argv);
385 g_test_add_func ("/chatroom-manager/dup-singleton",
386 test_empathy_chatroom_manager_dup_singleton);
387 g_test_add_func ("/chatroom-manager/add", test_empathy_chatroom_manager_add);
388 g_test_add_func ("/chatroom-manager/remove",
389 test_empathy_chatroom_manager_remove);
390 g_test_add_func ("/chatroom-manager/change-favorite",
391 test_empathy_chatroom_manager_change_favorite);
392 g_test_add_func ("/chatroom-manager/change-chatroom",
393 test_empathy_chatroom_manager_change_chatroom);
396 result = g_test_run ();