4 #include <glib/gstdio.h>
6 #include <gconf/gconf.h>
7 #include <gconf/gconf-client.h>
8 #include <telepathy-glib/account-manager.h>
9 #include <telepathy-glib/util.h>
11 #include <libempathy/empathy-chatroom-manager.h>
13 #include "test-helper.h"
15 #define CHATROOM_SAMPLE "chatrooms-sample.xml"
16 #define CHATROOM_FILE "chatrooms.xml"
20 check_chatroom (EmpathyChatroom *chatroom,
23 gboolean auto_connect,
28 fail_if (tp_strdiff (empathy_chatroom_get_name (chatroom), name));
29 fail_if (tp_strdiff (empathy_chatroom_get_room (chatroom), room));
30 fail_if (empathy_chatroom_get_auto_connect (chatroom) != auto_connect);
31 g_object_get (chatroom, "favorite", &_favorite, NULL);
32 fail_if (favorite != _favorite);
39 gboolean auto_connect;
44 check_chatrooms_list (EmpathyChatroomManager *mgr,
45 EmpathyAccount *account,
46 struct chatroom_t *_chatrooms,
53 fail_if (empathy_chatroom_manager_get_count (mgr, account) != nb_chatrooms);
55 found = g_hash_table_new (g_str_hash, g_str_equal);
56 for (i = 0; i < nb_chatrooms; i++)
58 g_hash_table_insert (found, _chatrooms[i].room, &_chatrooms[i]);
61 chatrooms = empathy_chatroom_manager_get_chatrooms (mgr, account);
62 fail_if (g_list_length (chatrooms) != nb_chatrooms);
64 for (l = chatrooms; l != NULL; l = g_list_next (l))
66 EmpathyChatroom *chatroom = l->data;
67 struct chatroom_t *tmp;
69 tmp = g_hash_table_lookup (found, empathy_chatroom_get_room (chatroom));
70 fail_if (tmp == NULL);
72 check_chatroom (chatroom, tmp->name, tmp->room, tmp->auto_connect,
75 g_hash_table_remove (found, empathy_chatroom_get_room (chatroom));
78 fail_if (g_hash_table_size (found) != 0);
80 g_list_free (chatrooms);
81 g_hash_table_destroy (found);
85 change_account_name_in_file (EmpathyAccount *account,
90 cmd = g_strdup_printf ("sed -i 's/CHANGE_ME/%s/' %s",
91 empathy_account_get_unique_name (account), file);
93 if (system (cmd) == -1)
95 g_print ("'%s' call failed\n", cmd);
104 START_TEST (test_empathy_chatroom_manager_dup_singleton)
106 EmpathyChatroomManager *mgr;
108 EmpathyAccount *account;
109 EmpathyAccountManager *account_manager;
110 struct chatroom_t chatrooms[] = {
111 { "name1", "room1", TRUE, TRUE },
112 { "name2", "room2", FALSE, TRUE }};
114 account_manager = empathy_account_manager_dup_singleton ();
115 account = get_test_account ();
117 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
119 file = get_user_xml_file (CHATROOM_FILE);
121 /* change the chatrooms XML file to use the account we just created */
122 if (!change_account_name_in_file (account, file))
125 mgr = empathy_chatroom_manager_dup_singleton (file);
126 check_chatrooms_list (mgr, account, chatrooms, 2);
129 g_object_unref (mgr);
130 g_object_unref (account_manager);
131 g_object_unref (account);
135 START_TEST (test_empathy_chatroom_manager_add)
137 EmpathyChatroomManager *mgr;
139 EmpathyAccount *account;
140 EmpathyAccountManager *account_manager;
141 struct chatroom_t chatrooms[] = {
142 { "name1", "room1", TRUE, TRUE },
143 { "name2", "room2", FALSE, TRUE },
144 { "name3", "room3", FALSE, TRUE },
145 { "name4", "room4", FALSE, FALSE }};
146 EmpathyChatroom *chatroom;
148 account_manager = empathy_account_manager_dup_singleton ();
150 account = get_test_account ();
152 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
154 file = get_user_xml_file (CHATROOM_FILE);
156 /* change the chatrooms XML file to use the account we just created */
157 fail_unless (change_account_name_in_file (account, file));
159 mgr = empathy_chatroom_manager_dup_singleton (file);
161 /* add a favorite chatroom */
162 chatroom = empathy_chatroom_new_full (account, "room3", "name3", FALSE);
163 g_object_set (chatroom, "favorite", TRUE, NULL);
164 empathy_chatroom_manager_add (mgr, chatroom);
165 g_object_unref (chatroom);
167 check_chatrooms_list (mgr, account, chatrooms, 3);
169 /* reload chatrooms file */
170 g_object_unref (mgr);
171 mgr = empathy_chatroom_manager_dup_singleton (file);
173 /* chatroom has been added to the XML file as it's a favorite */
174 check_chatrooms_list (mgr, account, chatrooms, 3);
176 /* add a non favorite chatroom */
177 chatroom = empathy_chatroom_new_full (account, "room4", "name4", FALSE);
178 g_object_set (chatroom, "favorite", FALSE, NULL);
179 empathy_chatroom_manager_add (mgr, chatroom);
180 g_object_unref (chatroom);
182 check_chatrooms_list (mgr, account, chatrooms, 4);
184 /* reload chatrooms file */
185 g_object_unref (mgr);
186 mgr = empathy_chatroom_manager_dup_singleton (file);
188 /* chatrooms has not been added to the XML file */
189 check_chatrooms_list (mgr, account, chatrooms, 3);
191 g_object_unref (mgr);
193 g_object_unref (account_manager);
194 g_object_unref (account);
198 START_TEST (test_empathy_chatroom_manager_remove)
200 EmpathyChatroomManager *mgr;
202 EmpathyAccount *account;
203 struct chatroom_t chatrooms[] = {
204 { "name2", "room2", FALSE, TRUE }};
205 EmpathyChatroom *chatroom;
206 EmpathyAccountManager *account_mgr;
208 account_mgr = empathy_account_manager_dup_singleton ();
209 account = get_test_account ();
211 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
213 file = get_user_xml_file (CHATROOM_FILE);
215 /* change the chatrooms XML file to use the account we just created */
216 fail_unless (change_account_name_in_file (account, file));
218 mgr = empathy_chatroom_manager_dup_singleton (file);
221 chatroom = empathy_chatroom_manager_find (mgr, account, "room1");
222 fail_if (chatroom == NULL);
223 empathy_chatroom_manager_remove (mgr, chatroom);
225 check_chatrooms_list (mgr, account, chatrooms, 1);
227 /* reload chatrooms file */
228 g_object_unref (mgr);
229 mgr = empathy_chatroom_manager_dup_singleton (file);
231 check_chatrooms_list (mgr, account, chatrooms, 1);
234 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
235 fail_if (chatroom == NULL);
237 empathy_chatroom_manager_remove (mgr, chatroom);
239 check_chatrooms_list (mgr, account, chatrooms, 0);
241 /* reload chatrooms file */
242 g_object_unref (mgr);
243 mgr = empathy_chatroom_manager_dup_singleton (file);
245 check_chatrooms_list (mgr, account, chatrooms, 0);
247 g_object_unref (mgr);
249 g_object_unref (account);
250 g_object_unref (account_mgr);
254 START_TEST (test_empathy_chatroom_manager_change_favorite)
256 EmpathyChatroomManager *mgr;
258 EmpathyAccount *account;
259 EmpathyAccountManager *account_manager;
260 struct chatroom_t chatrooms[] = {
261 { "name1", "room1", TRUE, TRUE },
262 { "name2", "room2", FALSE, FALSE }};
263 EmpathyChatroom *chatroom;
265 account_manager = empathy_account_manager_dup_singleton ();
266 account = get_test_account ();
268 copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
270 file = get_user_xml_file (CHATROOM_FILE);
272 /* change the chatrooms XML file to use the account we just created */
273 fail_unless (change_account_name_in_file (account, file));
275 mgr = empathy_chatroom_manager_dup_singleton (file);
277 /* room2 is not favorite anymore */
278 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
279 fail_if (chatroom == NULL);
280 g_object_set (chatroom, "favorite", FALSE, NULL);
282 check_chatrooms_list (mgr, account, chatrooms, 2);
284 /* reload chatrooms file */
285 g_object_unref (mgr);
286 mgr = empathy_chatroom_manager_dup_singleton (file);
288 /* room2 is not present in the XML file anymore as it's not a favorite */
289 check_chatrooms_list (mgr, account, chatrooms, 1);
292 chatroom = empathy_chatroom_new_full (account, "room2", "name2", FALSE);
293 empathy_chatroom_manager_add (mgr, chatroom);
295 check_chatrooms_list (mgr, account, chatrooms, 2);
297 /* set room2 as favorite */
298 g_object_set (chatroom, "favorite", TRUE, NULL);
300 chatrooms[1].favorite = TRUE;
301 check_chatrooms_list (mgr, account, chatrooms, 2);
303 /* reload chatrooms file */
304 g_object_unref (mgr);
305 mgr = empathy_chatroom_manager_dup_singleton (file);
307 /* room2 is back in the XML file now */
308 check_chatrooms_list (mgr, account, chatrooms, 2);
310 g_object_unref (mgr);
311 g_object_unref (chatroom);
313 g_object_unref (account_manager);
314 g_object_unref (account);
318 START_TEST (test_empathy_chatroom_manager_change_chatroom)
320 EmpathyChatroomManager *mgr;
322 EmpathyAccount *account;
323 EmpathyAccountManager *account_manager;
324 struct chatroom_t chatrooms[] = {
325 { "name1", "room1", TRUE, TRUE },
326 { "name2", "room2", FALSE, TRUE }};
327 EmpathyChatroom *chatroom;
329 account_manager = empathy_account_manager_dup_singleton ();
330 account = get_test_account ();
332 copy_xml_file (CHATROOM_SAMPLE, "foo.xml");
334 file = get_user_xml_file ("foo.xml");
336 /* change the chatrooms XML file to use the account we just created */
337 fail_unless (change_account_name_in_file (account, file));
339 mgr = empathy_chatroom_manager_dup_singleton (file);
341 check_chatrooms_list (mgr, account, chatrooms, 2);
343 /* change room2 name */
344 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
345 fail_if (chatroom == NULL);
346 empathy_chatroom_set_name (chatroom, "new_name");
348 /* reload chatrooms file */
349 g_object_unref (mgr);
350 mgr = empathy_chatroom_manager_dup_singleton (file);
352 chatrooms[1].name = "new_name";
353 check_chatrooms_list (mgr, account, chatrooms, 2);
355 /* change room2 auto-connect status */
356 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
357 fail_if (chatroom == NULL);
358 empathy_chatroom_set_auto_connect (chatroom, TRUE);
360 /* reload chatrooms file */
361 g_object_unref (mgr);
362 mgr = empathy_chatroom_manager_dup_singleton (file);
364 chatrooms[1].auto_connect = TRUE;
365 check_chatrooms_list (mgr, account, chatrooms, 2);
367 /* change room2 room */
368 chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
369 fail_if (chatroom == NULL);
370 empathy_chatroom_set_room (chatroom, "new_room");
372 /* reload chatrooms file */
373 g_object_unref (mgr);
374 mgr = empathy_chatroom_manager_dup_singleton (file);
376 chatrooms[1].room = "new_room";
377 check_chatrooms_list (mgr, account, chatrooms, 2);
379 g_object_unref (mgr);
381 g_object_unref (account);
382 g_object_unref (account_manager);
393 test_init (argc, argv);
396 g_test_add_func ("/chatroom-manager/dup-singleton",
397 test_empathy_chatroom_manager_dup_singleton);
398 g_test_add_func ("/chatroom-manager/add", test_empathy_chatroom_manager_add);
399 g_test_add_func ("/chatroom-manager/remove",
400 test_empathy_chatroom_manager_remove);
401 g_test_add_func ("/chatroom-manager/change-favorite",
402 test_empathy_chatroom_manager_change_favorite);
403 g_test_add_func ("/chatroom-manager/change-chatroom",
404 test_empathy_chatroom_manager_change_chatroom);
407 result = g_test_run ();