4 #include <glib/gstdio.h>
6 #include <gconf/gconf.h>
7 #include <gconf/gconf-client.h>
8 #include <telepathy-glib/util.h>
11 #include "check-helpers.h"
12 #include "check-libempathy.h"
13 #include "check-empathy-helpers.h"
15 #include <libempathy/empathy-chatroom-manager.h>
17 #define CHATROOM_SAMPLE "chatrooms-sample.xml"
18 #define CHATROOM_FILE "chatrooms.xml"
21 check_chatroom (EmpathyChatroom *chatroom,
24 gboolean auto_connect,
29 fail_if (tp_strdiff (empathy_chatroom_get_name (chatroom), name));
30 fail_if (tp_strdiff (empathy_chatroom_get_room (chatroom), room));
31 fail_if (empathy_chatroom_get_auto_connect (chatroom) != auto_connect);
32 g_object_get (chatroom, "favorite", &_favorite, NULL);
33 fail_if (favorite != _favorite);
40 gboolean auto_connect;
45 check_chatrooms_list (EmpathyChatroomManager *mgr,
47 struct chatroom_t *_chatrooms,
54 fail_if (empathy_chatroom_manager_get_count (mgr, account) != nb_chatrooms);
56 found = g_hash_table_new (g_str_hash, g_str_equal);
57 for (i = 0; i < nb_chatrooms; i++)
59 g_hash_table_insert (found, _chatrooms[i].room, &_chatrooms[i]);
62 chatrooms = empathy_chatroom_manager_get_chatrooms (mgr, account);
63 fail_if (g_list_length (chatrooms) != nb_chatrooms);
65 for (l = chatrooms; l != NULL; l = g_list_next (l))
67 EmpathyChatroom *chatroom = l->data;
68 struct chatroom_t *tmp;
70 tmp = g_hash_table_lookup (found, empathy_chatroom_get_room (chatroom));
71 fail_if (tmp == NULL);
73 check_chatroom (chatroom, tmp->name, tmp->room, tmp->auto_connect,
76 g_hash_table_remove (found, empathy_chatroom_get_room (chatroom));
79 fail_if (g_hash_table_size (found) != 0);
81 g_list_free (chatrooms);
82 g_hash_table_destroy (found);
86 change_account_name_in_file (McAccount *account,
91 cmd = g_strdup_printf ("sed -i 's/CHANGE_ME/%s/' %s",
92 mc_account_get_unique_name (account), file);
94 if (system (cmd) == -1)
96 g_print ("'%s' call failed\n", cmd);
105 START_TEST (test_empathy_chatroom_manager_dup_singleton)
107 EmpathyChatroomManager *mgr;
110 struct chatroom_t chatrooms[] = {
111 { "name1", "room1", TRUE, TRUE },
112 { "name2", "room2", FALSE, TRUE }};
114 account = get_test_account ();
116 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
118 file = get_user_xml_file (CHATROOM_FILE);
120 /* change the chatrooms XML file to use the account we just created */
121 if (!change_account_name_in_file (account, file))
124 mgr = empathy_chatroom_manager_dup_singleton (file);
125 check_chatrooms_list (mgr, account, chatrooms, 2);
128 g_object_unref (mgr);
129 g_object_unref (account);
133 START_TEST (test_empathy_chatroom_manager_add)
135 EmpathyChatroomManager *mgr;
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 = 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 if (!change_account_name_in_file (account, file))
155 mgr = empathy_chatroom_manager_dup_singleton (file);
157 /* add a favorite chatroom */
158 chatroom = empathy_chatroom_new_full (account, "room3", "name3", FALSE);
159 g_object_set (chatroom, "favorite", TRUE, NULL);
160 empathy_chatroom_manager_add (mgr, chatroom);
161 g_object_unref (chatroom);
163 check_chatrooms_list (mgr, account, chatrooms, 3);
165 /* reload chatrooms file */
166 g_object_unref (mgr);
167 mgr = empathy_chatroom_manager_dup_singleton (file);
169 /* chatroom has been added to the XML file as it's a favorite */
170 check_chatrooms_list (mgr, account, chatrooms, 3);
172 /* add a non favorite chatroom */
173 chatroom = empathy_chatroom_new_full (account, "room4", "name4", FALSE);
174 g_object_set (chatroom, "favorite", FALSE, NULL);
175 empathy_chatroom_manager_add (mgr, chatroom);
176 g_object_unref (chatroom);
178 check_chatrooms_list (mgr, account, chatrooms, 4);
180 /* reload chatrooms file */
181 g_object_unref (mgr);
182 mgr = empathy_chatroom_manager_dup_singleton (file);
184 /* chatrooms has not been added to the XML file */
185 check_chatrooms_list (mgr, account, chatrooms, 3);
187 g_object_unref (mgr);
189 g_object_unref (account);
193 START_TEST (test_empathy_chatroom_manager_remove)
195 EmpathyChatroomManager *mgr;
198 struct chatroom_t chatrooms[] = {
199 { "name2", "room2", FALSE, TRUE }};
200 EmpathyChatroom *chatroom;
202 account = get_test_account ();
204 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
206 file = get_user_xml_file (CHATROOM_FILE);
208 /* change the chatrooms XML file to use the account we just created */
209 if (!change_account_name_in_file (account, file))
212 mgr = empathy_chatroom_manager_dup_singleton (file);
215 chatroom = empathy_chatroom_manager_find (mgr, account, "room1");
216 fail_if (chatroom == NULL);
217 empathy_chatroom_manager_remove (mgr, chatroom);
219 check_chatrooms_list (mgr, account, chatrooms, 1);
221 /* reload chatrooms file */
222 g_object_unref (mgr);
223 mgr = empathy_chatroom_manager_dup_singleton (file);
225 check_chatrooms_list (mgr, account, chatrooms, 1);
228 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
229 fail_if (chatroom == NULL);
231 empathy_chatroom_manager_remove (mgr, chatroom);
233 check_chatrooms_list (mgr, account, chatrooms, 0);
235 /* reload chatrooms file */
236 g_object_unref (mgr);
237 mgr = empathy_chatroom_manager_dup_singleton (file);
239 check_chatrooms_list (mgr, account, chatrooms, 0);
241 g_object_unref (mgr);
243 g_object_unref (account);
247 START_TEST (test_empathy_chatroom_manager_change_favorite)
249 EmpathyChatroomManager *mgr;
252 struct chatroom_t chatrooms[] = {
253 { "name1", "room1", TRUE, TRUE },
254 { "name2", "room2", FALSE, FALSE }};
255 EmpathyChatroom *chatroom;
257 account = get_test_account ();
259 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
261 file = get_user_xml_file (CHATROOM_FILE);
263 /* change the chatrooms XML file to use the account we just created */
264 if (!change_account_name_in_file (account, file))
267 mgr = empathy_chatroom_manager_dup_singleton (file);
269 /* room2 is not favorite anymore */
270 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
271 fail_if (chatroom == NULL);
272 g_object_set (chatroom, "favorite", FALSE, NULL);
274 check_chatrooms_list (mgr, account, chatrooms, 2);
276 /* reload chatrooms file */
277 g_object_unref (mgr);
278 mgr = empathy_chatroom_manager_dup_singleton (file);
280 /* room2 is not present in the XML file anymore as it's not a favorite */
281 check_chatrooms_list (mgr, account, chatrooms, 1);
284 chatroom = empathy_chatroom_new_full (account, "room2", "name2", FALSE);
285 empathy_chatroom_manager_add (mgr, chatroom);
287 check_chatrooms_list (mgr, account, chatrooms, 2);
289 /* set room2 as favorite */
290 g_object_set (chatroom, "favorite", TRUE, NULL);
292 chatrooms[1].favorite = TRUE;
293 check_chatrooms_list (mgr, account, chatrooms, 2);
295 /* reload chatrooms file */
296 g_object_unref (mgr);
297 mgr = empathy_chatroom_manager_dup_singleton (file);
299 /* room2 is back in the XML file now */
300 check_chatrooms_list (mgr, account, chatrooms, 2);
302 g_object_unref (mgr);
303 g_object_unref (chatroom);
305 g_object_unref (account);
309 START_TEST (test_empathy_chatroom_manager_change_chatroom)
311 EmpathyChatroomManager *mgr;
314 struct chatroom_t chatrooms[] = {
315 { "name1", "room1", TRUE, TRUE },
316 { "name2", "room2", FALSE, TRUE }};
317 EmpathyChatroom *chatroom;
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 if (!change_account_name_in_file (account, file))
329 mgr = empathy_chatroom_manager_dup_singleton (file);
331 check_chatrooms_list (mgr, account, chatrooms, 2);
333 /* change room2 name */
334 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
335 fail_if (chatroom == NULL);
336 empathy_chatroom_set_name (chatroom, "new_name");
338 /* reload chatrooms file */
339 g_object_unref (mgr);
340 mgr = empathy_chatroom_manager_dup_singleton (file);
342 chatrooms[1].name = "new_name";
343 check_chatrooms_list (mgr, account, chatrooms, 2);
345 /* change room2 auto-connect status */
346 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
347 fail_if (chatroom == NULL);
348 empathy_chatroom_set_auto_connect (chatroom, TRUE);
350 /* reload chatrooms file */
351 g_object_unref (mgr);
352 mgr = empathy_chatroom_manager_dup_singleton (file);
354 chatrooms[1].auto_connect = TRUE;
355 check_chatrooms_list (mgr, account, chatrooms, 2);
357 /* change room2 room */
358 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
359 fail_if (chatroom == NULL);
360 empathy_chatroom_set_room (chatroom, "new_room");
362 /* reload chatrooms file */
363 g_object_unref (mgr);
364 mgr = empathy_chatroom_manager_dup_singleton (file);
366 chatrooms[1].room = "new_room";
367 check_chatrooms_list (mgr, account, chatrooms, 2);
369 g_object_unref (mgr);
371 g_object_unref (account);
376 make_empathy_chatroom_manager_tcase (void)
378 TCase *tc = tcase_create ("empathy-chatroom-manager");
379 tcase_add_test (tc, test_empathy_chatroom_manager_dup_singleton);
380 tcase_add_test (tc, test_empathy_chatroom_manager_add);
381 tcase_add_test (tc, test_empathy_chatroom_manager_remove);
382 tcase_add_test (tc, test_empathy_chatroom_manager_change_favorite);
383 tcase_add_test (tc, test_empathy_chatroom_manager_change_chatroom);