| 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", ×tamp1, |
94 "timestamp", ×tamp1, |
| 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(×tamp, g_date_time_unref); |
120 g_clear_pointer(×tamp, g_date_time_unref); |
| 96 g_clear_pointer(×tamp1, g_date_time_unref); |
121 g_clear_pointer(×tamp1, 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 } |