1 /* GSequencer - Advanced GTK Sequencer
2 * Copyright (C) 2005-2020 Joël Krähemann
3 *
4 * This file is part of GSequencer.
5 *
6 * GSequencer is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * GSequencer is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with GSequencer. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include <glib.h>
21 #include <glib-object.h>
22
23 #include <CUnit/CUnit.h>
24 #include <CUnit/Automated.h>
25 #include <CUnit/Basic.h>
26
27 #include <ags/libags.h>
28
29 int ags_message_queue_test_init_suite();
30 int ags_message_queue_test_clean_suite();
31
32 void ags_message_queue_test_set_sender_namespace();
33 void ags_message_queue_test_get_sender_namespace();
34 void ags_message_queue_test_set_recipient_namespace();
35 void ags_message_queue_test_get_recipient_namespace();
36 void ags_message_queue_test_set_message_envelope();
37 void ags_message_queue_test_get_message_envelope();
38 void ags_message_queue_test_add_message_envelope();
39 void ags_message_queue_test_remove_message_envelope();
40 void ags_message_queue_test_find_sender();
41 void ags_message_queue_test_find_recipient();
42 void ags_message_queue_test_query_message();
43
44 #define AGS_MESSAGE_QUEUE_TEST_SENDER_NAMESPACE "test-sender"
45
46 #define AGS_MESSAGE_QUEUE_TEST_RECIPIENT_NAMESPACE "test-recipient"
47
48 /* The suite initialization function.
49 * Opens the temporary file used by the tests.
50 * Returns zero on success, non-zero otherwise.
51 */
52 int
ags_message_queue_test_init_suite()53 ags_message_queue_test_init_suite()
54 {
55 return(0);
56 }
57
58 /* The suite cleanup function.
59 * Closes the temporary file used by the tests.
60 * Returns zero on success, non-zero otherwise.
61 */
62 int
ags_message_queue_test_clean_suite()63 ags_message_queue_test_clean_suite()
64 {
65 return(0);
66 }
67
68 void
ags_message_queue_test_set_sender_namespace()69 ags_message_queue_test_set_sender_namespace()
70 {
71 AgsMessageQueue *message_queue;
72
73 message_queue = g_object_new(AGS_TYPE_MESSAGE_QUEUE,
74 NULL);
75
76 CU_ASSERT(message_queue->sender_namespace == NULL);
77
78 ags_message_queue_set_sender_namespace(message_queue,
79 AGS_MESSAGE_QUEUE_TEST_SENDER_NAMESPACE);
80
81 CU_ASSERT(!g_strcmp0(message_queue->sender_namespace,
82 AGS_MESSAGE_QUEUE_TEST_SENDER_NAMESPACE));
83 }
84
85 void
ags_message_queue_test_get_sender_namespace()86 ags_message_queue_test_get_sender_namespace()
87 {
88 AgsMessageQueue *message_queue;
89
90 message_queue = g_object_new(AGS_TYPE_MESSAGE_QUEUE,
91 NULL);
92
93 message_queue->sender_namespace = g_strdup(AGS_MESSAGE_QUEUE_TEST_SENDER_NAMESPACE);
94
95 CU_ASSERT(!g_strcmp0(ags_message_queue_get_sender_namespace(message_queue),
96 AGS_MESSAGE_QUEUE_TEST_SENDER_NAMESPACE));
97 }
98
99 void
ags_message_queue_test_set_recipient_namespace()100 ags_message_queue_test_set_recipient_namespace()
101 {
102 AgsMessageQueue *message_queue;
103
104 message_queue = g_object_new(AGS_TYPE_MESSAGE_QUEUE,
105 NULL);
106
107 CU_ASSERT(message_queue->recipient_namespace == NULL);
108
109 ags_message_queue_set_recipient_namespace(message_queue,
110 AGS_MESSAGE_QUEUE_TEST_RECIPIENT_NAMESPACE);
111
112 CU_ASSERT(!g_strcmp0(message_queue->recipient_namespace,
113 AGS_MESSAGE_QUEUE_TEST_RECIPIENT_NAMESPACE));
114 }
115
116 void
ags_message_queue_test_get_recipient_namespace()117 ags_message_queue_test_get_recipient_namespace()
118 {
119 AgsMessageQueue *message_queue;
120
121 message_queue = g_object_new(AGS_TYPE_MESSAGE_QUEUE,
122 NULL);
123
124 message_queue->recipient_namespace = g_strdup(AGS_MESSAGE_QUEUE_TEST_RECIPIENT_NAMESPACE);
125
126 CU_ASSERT(!g_strcmp0(ags_message_queue_get_recipient_namespace(message_queue),
127 AGS_MESSAGE_QUEUE_TEST_RECIPIENT_NAMESPACE));
128 }
129
130 void
ags_message_queue_test_set_message_envelope()131 ags_message_queue_test_set_message_envelope()
132 {
133 AgsMessageQueue *message_queue;
134
135 GList *start_message_envelope;
136
137 message_queue = g_object_new(AGS_TYPE_MESSAGE_QUEUE,
138 NULL);
139
140 start_message_envelope = NULL;
141
142 start_message_envelope = g_list_prepend(start_message_envelope,
143 g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, NULL));
144 start_message_envelope = g_list_prepend(start_message_envelope,
145 g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, NULL));
146
147 CU_ASSERT(message_queue->message_envelope == NULL);
148
149 ags_message_queue_set_message_envelope(message_queue,
150 start_message_envelope);
151
152 CU_ASSERT(message_queue->message_envelope == start_message_envelope);
153 }
154
155 void
ags_message_queue_test_get_message_envelope()156 ags_message_queue_test_get_message_envelope()
157 {
158 AgsMessageQueue *message_queue;
159
160 GList *start_message_envelope;
161
162 message_queue = g_object_new(AGS_TYPE_MESSAGE_QUEUE,
163 NULL);
164
165 start_message_envelope = NULL;
166
167 start_message_envelope = g_list_prepend(start_message_envelope,
168 g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, NULL));
169 start_message_envelope = g_list_prepend(start_message_envelope,
170 g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, NULL));
171
172 message_queue->message_envelope = start_message_envelope;
173
174 CU_ASSERT(ags_message_queue_get_message_envelope(message_queue) == start_message_envelope);
175 }
176
177 void
ags_message_queue_test_add_message_envelope()178 ags_message_queue_test_add_message_envelope()
179 {
180 AgsMessageQueue *message_queue;
181
182 AgsMessageEnvelope *message_envelope_0, *message_envelope_1;
183
184 message_queue = g_object_new(AGS_TYPE_MESSAGE_QUEUE,
185 NULL);
186
187 message_envelope_0 = g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, NULL);
188
189 ags_message_queue_add_message_envelope(message_queue,
190 message_envelope_0);
191
192 message_envelope_1 = g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, NULL);
193
194 ags_message_queue_add_message_envelope(message_queue,
195 message_envelope_1);
196
197 CU_ASSERT(g_list_find(message_queue->message_envelope, message_envelope_0) != NULL);
198 CU_ASSERT(g_list_find(message_queue->message_envelope, message_envelope_1) != NULL);
199 }
200
201 void
ags_message_queue_test_remove_message_envelope()202 ags_message_queue_test_remove_message_envelope()
203 {
204 AgsMessageQueue *message_queue;
205
206 GList *start_message_envelope;
207
208 AgsMessageEnvelope *message_envelope_0, *message_envelope_1;
209
210 message_queue = g_object_new(AGS_TYPE_MESSAGE_QUEUE,
211 NULL);
212
213 start_message_envelope = NULL;
214
215 start_message_envelope = g_list_prepend(start_message_envelope,
216 (message_envelope_0 = g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, NULL)));
217 start_message_envelope = g_list_prepend(start_message_envelope,
218 (message_envelope_1 = g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, NULL)));
219
220 message_queue->message_envelope = start_message_envelope;
221
222 ags_message_queue_remove_message_envelope(message_queue,
223 message_envelope_0);
224
225 CU_ASSERT(g_list_find(message_queue->message_envelope, message_envelope_0) == NULL);
226 CU_ASSERT(g_list_find(message_queue->message_envelope, message_envelope_1) != NULL);
227
228 ags_message_queue_remove_message_envelope(message_queue,
229 message_envelope_1);
230
231 CU_ASSERT(g_list_find(message_queue->message_envelope, message_envelope_1) == NULL);
232 }
233
234 void
ags_message_queue_test_find_sender()235 ags_message_queue_test_find_sender()
236 {
237 AgsMessageQueue *message_queue;
238
239 GList *start_message_envelope;
240
241 AgsMessageEnvelope *message_envelope_0, *message_envelope_1;
242 AgsThread *sender_0, *sender_1, *sender_2;
243
244 message_queue = g_object_new(AGS_TYPE_MESSAGE_QUEUE,
245 NULL);
246
247 start_message_envelope = NULL;
248
249 start_message_envelope = g_list_prepend(start_message_envelope,
250 (message_envelope_0 = g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, "sender", (sender_0 = ags_thread_new()), NULL)));
251 start_message_envelope = g_list_prepend(start_message_envelope,
252 (message_envelope_1 = g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, "sender", (sender_1 = ags_thread_new()), NULL)));
253
254 sender_2 = ags_thread_new();
255
256 message_queue->message_envelope = start_message_envelope;
257
258 CU_ASSERT(ags_message_queue_find_sender(message_queue, sender_0) != NULL);
259 CU_ASSERT(ags_message_queue_find_sender(message_queue, sender_1) != NULL);
260 CU_ASSERT(ags_message_queue_find_sender(message_queue, sender_2) == NULL);
261 }
262
263 void
ags_message_queue_test_find_recipient()264 ags_message_queue_test_find_recipient()
265 {
266 AgsMessageQueue *message_queue;
267
268 GList *start_message_envelope;
269
270 AgsMessageEnvelope *message_envelope_0, *message_envelope_1;
271 AgsThread *recipient_0, *recipient_1, *recipient_2;
272
273 message_queue = g_object_new(AGS_TYPE_MESSAGE_QUEUE,
274 NULL);
275
276 start_message_envelope = NULL;
277
278 start_message_envelope = g_list_prepend(start_message_envelope,
279 (message_envelope_0 = g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, "recipient", (recipient_0 = ags_thread_new()), NULL)));
280 start_message_envelope = g_list_prepend(start_message_envelope,
281 (message_envelope_1 = g_object_new(AGS_TYPE_MESSAGE_ENVELOPE, "recipient", (recipient_1 = ags_thread_new()), NULL)));
282
283 recipient_2 = ags_thread_new();
284
285 message_queue->message_envelope = start_message_envelope;
286
287 CU_ASSERT(ags_message_queue_find_recipient(message_queue, recipient_0) != NULL);
288 CU_ASSERT(ags_message_queue_find_recipient(message_queue, recipient_1) != NULL);
289 CU_ASSERT(ags_message_queue_find_recipient(message_queue, recipient_2) == NULL);
290 }
291
292 void
ags_message_queue_test_query_message()293 ags_message_queue_test_query_message()
294 {
295 AgsMessageQueue *message_queue_0;
296 AgsMessageEnvelope *message_envelope_0, *message_envelope_1;
297
298 xmlDoc *doc_0, *doc_1;
299 xmlNode *root_node;
300
301 message_queue_0 = ags_message_queue_new("ags-test-000");
302
303 /* specify message body */
304 doc_0 = xmlNewDoc("1.0");
305
306 root_node = xmlNewNode(NULL,
307 "ags-command");
308 xmlDocSetRootElement(doc_0, root_node);
309
310 xmlNewProp(root_node,
311 "method",
312 "AgsMessageQueueTest::test-signal");
313
314 message_envelope_0 = ags_message_envelope_new(NULL,
315 NULL,
316 doc_0);
317 ags_message_queue_add_message_envelope(message_queue_0,
318 message_envelope_0);
319
320 /* specify message body */
321 doc_1 = xmlNewDoc("1.0");
322
323 root_node = xmlNewNode(NULL,
324 "ags-command");
325 xmlDocSetRootElement(doc_1, root_node);
326
327 xmlNewProp(root_node,
328 "method",
329 "AgsMessageQueueTest::test-signal");
330
331 message_envelope_1 = ags_message_envelope_new(NULL,
332 NULL,
333 doc_1);
334 ags_message_queue_add_message_envelope(message_queue_0,
335 message_envelope_1);
336
337 CU_ASSERT(ags_message_queue_query_message(message_queue_0,
338 "/ags-command[@method = 'AgsMessageQueueTest::test-signal']") != NULL);
339 CU_ASSERT(ags_message_queue_query_message(message_queue_0,
340 "/ags-command[@method = 'AgsMessageQueueTest::test-signal']") != NULL);
341
342 CU_ASSERT(g_list_length(ags_message_queue_query_message(message_queue_0,
343 "/ags-command[@method = 'AgsMessageQueueTest::test-signal']")) == 2);
344 }
345
346 int
main(int argc,char ** argv)347 main(int argc, char **argv)
348 {
349 CU_pSuite pSuite = NULL;
350
351 /* initialize the CUnit test registry */
352 if(CUE_SUCCESS != CU_initialize_registry()){
353 return CU_get_error();
354 }
355
356 /* add a suite to the registry */
357 pSuite = CU_add_suite("AgsMessageQueueTest", ags_message_queue_test_init_suite, ags_message_queue_test_clean_suite);
358
359 if(pSuite == NULL){
360 CU_cleanup_registry();
361
362 return CU_get_error();
363 }
364
365 /* add the tests to the suite */
366 if((CU_add_test(pSuite, "test of AgsMessageQueue set sender namespace", ags_message_queue_test_set_sender_namespace) == NULL) ||
367 (CU_add_test(pSuite, "test of AgsMessageQueue get sender namespace", ags_message_queue_test_get_sender_namespace) == NULL) ||
368 (CU_add_test(pSuite, "test of AgsMessageQueue set recipient namespace", ags_message_queue_test_set_recipient_namespace) == NULL) ||
369 (CU_add_test(pSuite, "test of AgsMessageQueue get recipient namespace", ags_message_queue_test_get_recipient_namespace) == NULL) ||
370 (CU_add_test(pSuite, "test of AgsMessageQueue set message envelope", ags_message_queue_test_set_message_envelope) == NULL) ||
371 (CU_add_test(pSuite, "test of AgsMessageQueue get message envelope", ags_message_queue_test_get_message_envelope) == NULL) ||
372 (CU_add_test(pSuite, "test of AgsMessageQueue add message envelope", ags_message_queue_test_add_message_envelope) == NULL) ||
373 (CU_add_test(pSuite, "test of AgsMessageQueue remove message envelope", ags_message_queue_test_remove_message_envelope) == NULL) ||
374 (CU_add_test(pSuite, "test of AgsMessageQueue find sender", ags_message_queue_test_find_sender) == NULL) ||
375 (CU_add_test(pSuite, "test of AgsMessageQueue find recipient", ags_message_queue_test_find_recipient) == NULL) ||
376 (CU_add_test(pSuite, "test of AgsMessageQueue query message", ags_message_queue_test_query_message) == NULL)){
377 CU_cleanup_registry();
378
379 return CU_get_error();
380 }
381
382 /* Run all tests using the CUnit Basic interface */
383 CU_basic_set_mode(CU_BRM_VERBOSE);
384 CU_basic_run_tests();
385
386 CU_cleanup_registry();
387
388 return(CU_get_error());
389 }
390
391