libpurple/tests/test_presence_manager.c

changeset 42571
722be3b1a8aa
parent 42563
25d1b656d792
child 42860
99a4ef34cc71
equal deleted inserted replaced
42570:a980db2607fd 42571:722be3b1a8aa
69 69
70 static void 70 static void
71 test_purple_presence_manager_add_remove(void) { 71 test_purple_presence_manager_add_remove(void) {
72 PurplePresenceManager *manager = NULL; 72 PurplePresenceManager *manager = NULL;
73 PurpleSavedPresence *presence = NULL; 73 PurpleSavedPresence *presence = NULL;
74 GListModel *model = NULL;
75 gboolean success = FALSE; 74 gboolean success = FALSE;
76 guint len = 0; 75 guint len = 0;
77 guint added = 0; 76 guint added = 0;
78 guint removed = 0; 77 guint removed = 0;
79 guint changed = 0; 78 guint changed = 0;
80 const char *id = NULL; 79 const char *id = NULL;
81 80
82 manager = purple_presence_manager_new(NULL); 81 manager = purple_presence_manager_new(NULL);
83
84 /* When a presence manager is created, if there are no saved statuses it
85 * adds some default ones and sets the active presence. We need to clear
86 * all of that to get to a known state.
87 *
88 * The default statuses are checked in test_purple_presence_manager_new.
89 */
90 model = G_LIST_MODEL(manager);
91 purple_presence_manager_set_active(manager, NULL);
92 while(g_list_model_get_n_items(model) > 0) {
93 PurpleSavedPresence *presence = NULL;
94
95 /* Since we're removing items, the positions change, so we just always
96 * want to remove the item at position 0.
97 */
98 presence = g_list_model_get_item(model, 0);
99 purple_presence_manager_remove(manager,
100 purple_saved_presence_get_id(presence));
101 g_assert_finalize_object(presence);
102 }
103 82
104 /* Connect all of our signals to make sure they're being emitted. */ 83 /* Connect all of our signals to make sure they're being emitted. */
105 g_signal_connect(manager, "added", 84 g_signal_connect(manager, "added",
106 G_CALLBACK(test_purple_presence_manager_add_remove_counter), 85 G_CALLBACK(test_purple_presence_manager_add_remove_counter),
107 &added); 86 &added);
111 g_signal_connect(manager, "items-changed", 90 g_signal_connect(manager, "items-changed",
112 G_CALLBACK(test_purple_presence_manager_list_changed_counter), 91 G_CALLBACK(test_purple_presence_manager_list_changed_counter),
113 &changed); 92 &changed);
114 93
115 len = g_list_model_get_n_items(G_LIST_MODEL(manager)); 94 len = g_list_model_get_n_items(G_LIST_MODEL(manager));
116 g_assert_cmpuint(len, ==, 0); 95 /* The manager makes sure we always have online and offline presences. */
96 g_assert_cmpuint(len, ==, 2);
117 97
118 presence = purple_presence_manager_create(manager); 98 presence = purple_presence_manager_create(manager);
119 g_assert_true(PURPLE_IS_SAVED_PRESENCE(presence)); 99 g_assert_true(PURPLE_IS_SAVED_PRESENCE(presence));
120 purple_saved_presence_set_name(presence, "test presence"); 100 purple_saved_presence_set_name(presence, "test presence");
121 g_assert_cmpuint(added, ==, 1); 101 g_assert_cmpuint(added, ==, 1);
124 104
125 id = purple_saved_presence_get_id(presence); 105 id = purple_saved_presence_get_id(presence);
126 g_assert_nonnull(id); 106 g_assert_nonnull(id);
127 107
128 len = g_list_model_get_n_items(G_LIST_MODEL(manager)); 108 len = g_list_model_get_n_items(G_LIST_MODEL(manager));
129 g_assert_cmpuint(len, ==, 1); 109 g_assert_cmpuint(len, ==, 3);
130 110
131 success = purple_presence_manager_remove(manager, id); 111 success = purple_presence_manager_remove(manager, id);
132 g_assert_true(success); 112 g_assert_true(success);
133 g_assert_cmpuint(added, ==, 1); 113 g_assert_cmpuint(added, ==, 1);
134 g_assert_cmpuint(removed, ==, 1); 114 g_assert_cmpuint(removed, ==, 1);
135 g_assert_cmpuint(changed, ==, 2); 115 g_assert_cmpuint(changed, ==, 2);
136 116
137 len = g_list_model_get_n_items(G_LIST_MODEL(manager)); 117 len = g_list_model_get_n_items(G_LIST_MODEL(manager));
138 g_assert_cmpuint(len, ==, 0); 118 g_assert_cmpuint(len, ==, 2);
139 119
140 g_clear_object(&presence); 120 g_clear_object(&presence);
141 g_clear_object(&manager); 121 g_clear_object(&manager);
142 } 122 }
143 123
144 static void 124 static void
145 test_purple_presence_manager_persistence(void) { 125 test_purple_presence_manager_persistence(void) {
146 PurplePresenceManager *manager = NULL; 126 PurplePresenceManager *manager = NULL;
147 PurpleSavedPresence *presence = NULL; 127 PurpleSavedPresence *presence = NULL;
128 char *path = NULL;
148 char *filename = NULL; 129 char *filename = NULL;
149 char *old_id = NULL; 130 char *old_id = NULL;
150 const char *id = NULL; 131 const char *id = NULL;
151 const char *id1 = NULL; 132 const char *id1 = NULL;
152 gboolean ret = FALSE; 133 gboolean ret = FALSE;
153 134
154 filename = g_build_filename(TEST_CACHE_DIR, 135 path = g_build_filename(TEST_CACHE_DIR, "presence_manager_persistence",
155 "presence_manager_persistence.ini", 136 NULL);
156 NULL);
157 137
158 /* Remove the file if it exists so we can start from a known state. */ 138 /* Remove the file if it exists so we can start from a known state. */
139 filename = g_build_filename(path, "manager.ini", NULL);
159 g_remove(filename); 140 g_remove(filename);
141 g_clear_pointer(&filename, g_free);
160 142
161 /* Create the manager, add a presence, and make it active. */ 143 /* Create the manager, add a presence, and make it active. */
162 manager = purple_presence_manager_new(filename); 144 manager = purple_presence_manager_new(path);
163 g_assert_true(PURPLE_IS_PRESENCE_MANAGER(manager)); 145 g_assert_true(PURPLE_IS_PRESENCE_MANAGER(manager));
164 146
165 presence = purple_presence_manager_create(manager); 147 presence = purple_presence_manager_create(manager);
166 g_assert_true(PURPLE_IS_SAVED_PRESENCE(presence)); 148 purple_saved_presence_set_name(presence, "test-presence");
167 149
168 /* Save the id of the presence as we need to use it later. */ 150 /* Save the id of the presence as we need to use it later. */
169 id = purple_saved_presence_get_id(presence); 151 id = purple_saved_presence_get_id(presence);
170 old_id = g_strdup(id); 152 old_id = g_strdup(id);
171 153
172 /* Make the presence active. */ 154 /* Make the presence active. */
173 ret = purple_presence_manager_set_active(manager, id); 155 ret = purple_presence_manager_set_active(manager, presence);
174 g_assert_true(ret); 156 g_assert_true(ret);
175 g_clear_object(&presence); 157 g_clear_object(&presence);
176 158
177 presence = purple_presence_manager_get_active(manager); 159 presence = purple_presence_manager_get_active(manager);
178 g_assert_true(PURPLE_IS_SAVED_PRESENCE(presence)); 160 g_assert_true(PURPLE_IS_SAVED_PRESENCE(presence));
185 */ 167 */
186 presence = NULL; 168 presence = NULL;
187 g_clear_object(&manager); 169 g_clear_object(&manager);
188 170
189 /* Now create the manager again and verify that everything was restored. */ 171 /* Now create the manager again and verify that everything was restored. */
190 manager = purple_presence_manager_new(filename); 172 manager = purple_presence_manager_new(path);
191 g_assert_true(PURPLE_IS_PRESENCE_MANAGER(manager)); 173 g_assert_true(PURPLE_IS_PRESENCE_MANAGER(manager));
192 174
193 presence = purple_presence_manager_get_active(manager); 175 presence = purple_presence_manager_get_active(manager);
194 g_assert_true(PURPLE_IS_SAVED_PRESENCE(presence)); 176 g_assert_true(PURPLE_IS_SAVED_PRESENCE(presence));
195 177
197 g_assert_cmpstr(id, ==, old_id); 179 g_assert_cmpstr(id, ==, old_id);
198 g_clear_pointer(&old_id, g_free); 180 g_clear_pointer(&old_id, g_free);
199 181
200 /* Cleanup. */ 182 /* Cleanup. */
201 g_clear_object(&manager); 183 g_clear_object(&manager);
202 g_clear_pointer(&filename, g_free); 184 g_clear_pointer(&path, g_free);
203 } 185 }
204 186
205 /****************************************************************************** 187 /******************************************************************************
206 * Main 188 * Main
207 *****************************************************************************/ 189 *****************************************************************************/

mercurial