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 ();