libpurple/tests/test_message.c

changeset 42308
2f80061896de
parent 42307
083c070d4a27
child 42349
fbcea290a1f6
equal deleted inserted replaced
42307:083c070d4a27 42308:2f80061896de
19 #include <glib.h> 19 #include <glib.h>
20 20
21 #include <purple.h> 21 #include <purple.h>
22 22
23 /****************************************************************************** 23 /******************************************************************************
24 * Callbacks
25 *****************************************************************************/
26 static void
27 test_purple_message_notify_counter_cb(G_GNUC_UNUSED GObject *obj,
28 G_GNUC_UNUSED GParamSpec *pspec,
29 gpointer data)
30 {
31 guint *counter = data;
32
33 *counter = *counter + 1;
34 }
35
36 /******************************************************************************
24 * Tests 37 * Tests
25 *****************************************************************************/ 38 *****************************************************************************/
26 static void 39 static void
27 test_purple_message_properties(void) { 40 test_purple_message_properties(void) {
28 PurpleMessage *message = NULL; 41 PurpleMessage *message = NULL;
29 PurpleMessageContentType content_type = 0; 42 PurpleMessageContentType content_type = 0;
30 PurpleMessageFlags flags = 0; 43 PurpleMessageFlags flags = 0;
31 GDateTime *timestamp = NULL; 44 GDateTime *timestamp = NULL;
32 GDateTime *timestamp1 = NULL; 45 GDateTime *timestamp1 = NULL;
46 GDateTime *delivered_at1 = NULL;
33 GError *error = NULL; 47 GError *error = NULL;
34 GError *error1 = NULL; 48 GError *error1 = NULL;
35 char *id = NULL; 49 char *id = NULL;
36 char *author = NULL; 50 char *author = NULL;
37 char *author_alias = NULL; 51 char *author_alias = NULL;
38 char *author_name_color = NULL; 52 char *author_name_color = NULL;
39 char *recipient = NULL; 53 char *recipient = NULL;
40 char *contents = NULL; 54 char *contents = NULL;
41 gboolean action = FALSE; 55 gboolean action = FALSE;
56 gboolean delivered = FALSE;
42 57
43 timestamp = g_date_time_new_from_unix_utc(911347200); 58 timestamp = g_date_time_new_from_unix_utc(911347200);
44 error = g_error_new(g_quark_from_static_string("test-message"), 0, 59 error = g_error_new(g_quark_from_static_string("test-message"), 0,
45 "delivery failed"); 60 "delivery failed");
46 61
62 /* We don't set delivered-at here because delivered will set it for us so
63 * it's impossible to check that here, which is why we have separate tests
64 * to do that check. We do verify that delivered-at was set though.
65 */
47 message = g_object_new( 66 message = g_object_new(
48 PURPLE_TYPE_MESSAGE, 67 PURPLE_TYPE_MESSAGE,
49 "id", "id", 68 "id", "id",
50 "action", TRUE, 69 "action", TRUE,
51 "author", "author", 70 "author", "author",
52 "author-alias", "alias", 71 "author-alias", "alias",
53 "author-name-color", "purple", 72 "author-name-color", "purple",
73 "delivered", TRUE,
54 "recipient", "pidgy", 74 "recipient", "pidgy",
55 "contents", "Now that is a big door", 75 "contents", "Now that is a big door",
56 "content-type", PURPLE_MESSAGE_CONTENT_TYPE_MARKDOWN, 76 "content-type", PURPLE_MESSAGE_CONTENT_TYPE_MARKDOWN,
57 "timestamp", timestamp, 77 "timestamp", timestamp,
58 "flags", PURPLE_MESSAGE_SYSTEM, 78 "flags", PURPLE_MESSAGE_SYSTEM,
64 "id", &id, 84 "id", &id,
65 "action", &action, 85 "action", &action,
66 "author", &author, 86 "author", &author,
67 "author-alias", &author_alias, 87 "author-alias", &author_alias,
68 "author-name-color", &author_name_color, 88 "author-name-color", &author_name_color,
89 "delivered", &delivered,
90 "delivered-at", &delivered_at1,
69 "recipient", &recipient, 91 "recipient", &recipient,
70 "contents", &contents, 92 "contents", &contents,
71 "content-type", &content_type, 93 "content-type", &content_type,
72 "timestamp", &timestamp1, 94 "timestamp", &timestamp1,
73 "flags", &flags, 95 "flags", &flags,
77 g_assert_cmpstr(id, ==, "id"); 99 g_assert_cmpstr(id, ==, "id");
78 g_assert_true(action); 100 g_assert_true(action);
79 g_assert_cmpstr(author, ==, "author"); 101 g_assert_cmpstr(author, ==, "author");
80 g_assert_cmpstr(author_alias, ==, "alias"); 102 g_assert_cmpstr(author_alias, ==, "alias");
81 g_assert_cmpstr(author_name_color, ==, "purple"); 103 g_assert_cmpstr(author_name_color, ==, "purple");
104 g_assert_true(delivered);
105 g_assert_nonnull(delivered_at1);
82 g_assert_cmpstr(recipient, ==, "pidgy"); 106 g_assert_cmpstr(recipient, ==, "pidgy");
83 g_assert_cmpstr(contents, ==, "Now that is a big door"); 107 g_assert_cmpstr(contents, ==, "Now that is a big door");
84 g_assert_cmpint(content_type, ==, PURPLE_MESSAGE_CONTENT_TYPE_MARKDOWN); 108 g_assert_cmpint(content_type, ==, PURPLE_MESSAGE_CONTENT_TYPE_MARKDOWN);
85 g_assert_true(g_date_time_equal(timestamp1, timestamp)); 109 g_assert_true(g_date_time_equal(timestamp1, timestamp));
86 g_assert_cmpint(flags, ==, PURPLE_MESSAGE_SYSTEM); 110 g_assert_cmpint(flags, ==, PURPLE_MESSAGE_SYSTEM);
88 112
89 g_clear_pointer(&id, g_free); 113 g_clear_pointer(&id, g_free);
90 g_clear_pointer(&author, g_free); 114 g_clear_pointer(&author, g_free);
91 g_clear_pointer(&author_alias, g_free); 115 g_clear_pointer(&author_alias, g_free);
92 g_clear_pointer(&author_name_color, g_free); 116 g_clear_pointer(&author_name_color, g_free);
117 g_clear_pointer(&delivered_at1, g_date_time_unref);
93 g_clear_pointer(&recipient, g_free); 118 g_clear_pointer(&recipient, g_free);
94 g_clear_pointer(&contents, g_free); 119 g_clear_pointer(&contents, g_free);
95 g_clear_pointer(&timestamp, g_date_time_unref); 120 g_clear_pointer(&timestamp, g_date_time_unref);
96 g_clear_pointer(&timestamp1, g_date_time_unref); 121 g_clear_pointer(&timestamp1, g_date_time_unref);
97 g_clear_error(&error1); 122 g_clear_error(&error1);
98 g_clear_object(&message); 123 g_clear_object(&message);
99 } 124 }
100 125
126 static void
127 test_purple_message_delivered_set_delivered_at(void) {
128 PurpleMessage *message = NULL;
129 guint delivered_counter = 0;
130 guint delivered_at_counter = 0;
131
132 message = g_object_new(PURPLE_TYPE_MESSAGE, NULL);
133 g_signal_connect(message, "notify::delivered",
134 G_CALLBACK(test_purple_message_notify_counter_cb),
135 &delivered_counter);
136 g_signal_connect(message, "notify::delivered-at",
137 G_CALLBACK(test_purple_message_notify_counter_cb),
138 &delivered_at_counter);
139
140 /* The default delivery state is FALSE, so setting it to true, should call
141 * the notify signals and set delivered-at.
142 */
143 purple_message_set_delivered(message, TRUE);
144 g_assert_true(purple_message_get_delivered(message));
145 g_assert_nonnull(purple_message_get_delivered_at(message));
146 g_assert_cmpuint(delivered_counter, ==, 1);
147 g_assert_cmpuint(delivered_at_counter, ==, 1);
148
149 /* Now clear everything and verify it's empty. */
150 delivered_counter = 0;
151 delivered_at_counter = 0;
152
153 purple_message_set_delivered(message, FALSE);
154 g_assert_false(purple_message_get_delivered(message));
155 g_assert_null(purple_message_get_delivered_at(message));
156 g_assert_cmpuint(delivered_counter, ==, 1);
157 g_assert_cmpuint(delivered_at_counter, ==, 1);
158
159 g_clear_object(&message);
160 }
161
162 static void
163 test_purple_message_delivered_at_set_delivered(void) {
164 PurpleMessage *message = NULL;
165 GDateTime *delivered_at = NULL;
166 GDateTime *delivered_at1 = NULL;
167 guint delivered_counter = 0;
168 guint delivered_at_counter = 0;
169
170 message = g_object_new(PURPLE_TYPE_MESSAGE, NULL);
171 g_signal_connect(message, "notify::delivered",
172 G_CALLBACK(test_purple_message_notify_counter_cb),
173 &delivered_counter);
174 g_signal_connect(message, "notify::delivered-at",
175 G_CALLBACK(test_purple_message_notify_counter_cb),
176 &delivered_at_counter);
177
178 /* The default value for delivered-at is NULL, so setting it to non-null
179 * should emit the signals and everything.
180 */
181 delivered_at = g_date_time_new_now_utc();
182 purple_message_set_delivered_at(message, delivered_at);
183 g_assert_true(purple_message_get_delivered(message));
184 delivered_at1 = purple_message_get_delivered_at(message);
185 g_assert_nonnull(delivered_at1);
186 g_assert_true(g_date_time_equal(delivered_at1, delivered_at));
187 g_assert_cmpuint(delivered_counter, ==, 1);
188 g_assert_cmpuint(delivered_at_counter, ==, 1);
189
190 /* Now clear everything and make sure it's all good. */
191 delivered_counter = 0;
192 delivered_at_counter = 0;
193 purple_message_set_delivered_at(message, NULL);
194 g_assert_false(purple_message_get_delivered(message));
195 g_assert_null(purple_message_get_delivered_at(message));
196 g_assert_cmpuint(delivered_counter, ==, 1);
197 g_assert_cmpuint(delivered_at_counter, ==, 1);
198
199 g_clear_pointer(&delivered_at, g_date_time_unref);
200 g_clear_object(&message);
201 }
202
101 /****************************************************************************** 203 /******************************************************************************
102 * Main 204 * Main
103 *****************************************************************************/ 205 *****************************************************************************/
104 gint 206 gint
105 main(gint argc, gchar *argv[]) { 207 main(gint argc, gchar *argv[]) {
106 g_test_init(&argc, &argv, NULL); 208 g_test_init(&argc, &argv, NULL);
107 209
108 g_test_add_func("/message/properties", 210 g_test_add_func("/message/properties",
109 test_purple_message_properties); 211 test_purple_message_properties);
110 212
213 g_test_add_func("/message/delivered-sets-delivered-at",
214 test_purple_message_delivered_set_delivered_at);
215 g_test_add_func("/message/delivered-at-sets-delivered",
216 test_purple_message_delivered_at_set_delivered);
217
111 return g_test_run(); 218 return g_test_run();
112 } 219 }

mercurial