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