2 * This file is part of the libsigrokdecode project.
4 * Copyright (C) 2013 Uwe Hermann <uwe@hermann-uwe.de>
6 * This program 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 2 of the License, or
9 * (at your option) any later version.
11 * This program 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.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #include <libsigrokdecode.h> /* First, to avoid compiler warning. */
28 * Check whether srd_decoder_load_all() works.
29 * If it returns != SRD_OK (or segfaults) this test will fail.
31 START_TEST(test_load_all)
35 srd_init(DECODERS_TESTDIR);
36 ret = srd_decoder_load_all();
37 fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret);
43 * Check whether srd_decoder_load_all() fails without prior srd_init().
44 * If it returns != SRD_OK (or segfaults) this test will fail.
45 * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=178
47 START_TEST(test_load_all_no_init)
51 ret = srd_decoder_load_all();
52 fail_unless(ret != SRD_OK, "srd_decoder_load_all() didn't fail properly.");
57 * Check whether srd_decoder_load() works.
58 * If it returns != SRD_OK (or segfaults) this test will fail.
64 srd_init(DECODERS_TESTDIR);
65 ret = srd_decoder_load("uart");
66 fail_unless(ret == SRD_OK, "srd_decoder_load(uart) failed: %d.", ret);
67 ret = srd_decoder_load("spi");
68 fail_unless(ret == SRD_OK, "srd_decoder_load(spi) failed: %d.", ret);
69 ret = srd_decoder_load("usb_signalling");
70 fail_unless(ret == SRD_OK, "srd_decoder_load(usb_signalling) failed: %d.", ret);
76 * Check whether srd_decoder_load() fails for non-existing or bogus PDs.
77 * If it returns SRD_OK (or segfaults) this test will fail.
79 START_TEST(test_load_bogus)
81 srd_init(DECODERS_TESTDIR);
82 /* http://sigrok.org/bugzilla/show_bug.cgi?id=176 */
83 fail_unless(srd_decoder_load(NULL) != SRD_OK);
84 fail_unless(srd_decoder_load("") != SRD_OK);
85 fail_unless(srd_decoder_load(" ") != SRD_OK);
86 fail_unless(srd_decoder_load("nonexisting") != SRD_OK);
87 fail_unless(srd_decoder_load("UART") != SRD_OK);
88 fail_unless(srd_decoder_load("UaRt") != SRD_OK);
89 fail_unless(srd_decoder_load("u a r t") != SRD_OK);
90 fail_unless(srd_decoder_load("uart ") != SRD_OK);
91 fail_unless(srd_decoder_load(" uart") != SRD_OK);
92 fail_unless(srd_decoder_load(" uart ") != SRD_OK);
93 fail_unless(srd_decoder_load("uart spi") != SRD_OK);
99 * Check whether srd_decoder_load() works/fails for valid/bogus PDs.
100 * If it returns incorrect values (or segfaults) this test will fail.
102 START_TEST(test_load_valid_and_bogus)
104 srd_init(DECODERS_TESTDIR);
105 fail_unless(srd_decoder_load("") != SRD_OK);
106 fail_unless(srd_decoder_load("uart") == SRD_OK);
107 fail_unless(srd_decoder_load("") != SRD_OK);
108 fail_unless(srd_decoder_load("spi") == SRD_OK);
109 fail_unless(srd_decoder_load("") != SRD_OK);
110 fail_unless(srd_decoder_load("can") == SRD_OK);
111 fail_unless(srd_decoder_load("") != SRD_OK);
117 * Check whether srd_decoder_load() fails when run multiple times.
118 * If it returns a value != SRD_OK (or segfaults) this test will fail.
119 * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=177
121 START_TEST(test_load_multiple)
125 srd_init(DECODERS_TESTDIR);
126 ret = srd_decoder_load("uart");
127 fail_unless(ret == SRD_OK, "Loading uart PD 1x failed: %d", ret);
128 ret = srd_decoder_load("uart");
129 fail_unless(ret == SRD_OK, "Loading uart PD 2x failed: %d", ret);
130 ret = srd_decoder_load("uart");
131 fail_unless(ret == SRD_OK, "Loading uart PD 3x failed: %d", ret);
137 * Check whether srd_decoder_load() fails if a non-existing PD dir is used.
138 * If it returns SRD_OK (or segfaults) this test will fail.
140 START_TEST(test_load_nonexisting_pd_dir)
143 /* TODO: Build libsigrokdecode with no default PD dir. */
144 srd_init("/nonexisting_dir");
145 fail_unless(srd_decoder_load("spi") != SRD_OK);
146 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 0);
153 * Check whether srd_decoder_unload_all() works.
154 * If it returns != SRD_OK (or segfaults) this test will fail.
156 START_TEST(test_unload_all)
160 srd_init(DECODERS_TESTDIR);
161 ret = srd_decoder_load_all();
162 fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret);
163 ret = srd_decoder_unload_all();
164 fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret);
170 * Check whether srd_decoder_unload_all() works without prior srd_init().
171 * If it returns != SRD_OK (or segfaults) this test will fail.
173 START_TEST(test_unload_all_no_init)
177 ret = srd_decoder_unload_all();
178 fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret);
183 * Check whether srd_decoder_unload_all() works multiple times.
184 * If it returns != SRD_OK (or segfaults) this test will fail.
186 START_TEST(test_unload_all_multiple)
190 srd_init(DECODERS_TESTDIR);
191 for (i = 0; i < 10; i++) {
192 ret = srd_decoder_load_all();
193 fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret);
194 ret = srd_decoder_unload_all();
195 fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret);
202 * Check whether srd_decoder_unload_all() works multiple times (no load).
203 * If it returns != SRD_OK (or segfaults) this test will fail.
205 START_TEST(test_unload_all_multiple_noload)
209 srd_init(DECODERS_TESTDIR);
210 for (i = 0; i < 10; i++) {
211 ret = srd_decoder_unload_all();
212 fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret);
219 * Check whether srd_decoder_unload() works.
220 * If it returns != SRD_OK (or segfaults) this test will fail.
222 START_TEST(test_unload)
225 struct srd_decoder *dec;
227 srd_init(DECODERS_TESTDIR);
228 ret = srd_decoder_load("uart");
229 fail_unless(ret == SRD_OK, "srd_decoder_load(uart) failed: %d.", ret);
230 dec = srd_decoder_get_by_id("uart");
231 fail_unless(dec != NULL);
232 ret = srd_decoder_unload(dec);
233 fail_unless(ret == SRD_OK, "srd_decoder_unload() failed: %d.", ret);
239 * Check whether srd_decoder_unload(NULL) fails.
240 * If it returns SRD_OK (or segfaults) this test will fail.
242 START_TEST(test_unload_null)
244 srd_init(DECODERS_TESTDIR);
245 fail_unless(srd_decoder_unload(NULL) != SRD_OK);
251 * Check whether srd_decoder_unload(NULL) fails without prior srd_init().
252 * If it returns SRD_OK (or segfaults) this test will fail.
254 START_TEST(test_unload_null_no_init)
256 fail_unless(srd_decoder_unload(NULL) != SRD_OK);
261 * Check whether srd_decoder_list() returns a non-empty list.
262 * If it returns an empty list (or segfaults) this test will fail.
264 START_TEST(test_decoder_list)
266 srd_init(DECODERS_TESTDIR);
267 srd_decoder_load_all();
268 fail_unless(srd_decoder_list() != NULL);
274 * Check whether srd_decoder_list() without prior srd_decoder_load_all()
275 * returns an empty list (return value != NULL).
276 * If it returns a non-empty list (or segfaults) this test will fail.
278 START_TEST(test_decoder_list_no_load)
280 srd_init(DECODERS_TESTDIR);
281 fail_unless(srd_decoder_list() == NULL);
287 * Check whether srd_decoder_list() without prior srd_init()
288 * returns an empty list.
289 * If it returns a non-empty list (or segfaults) this test will fail.
290 * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=178
292 START_TEST(test_decoder_list_no_init)
294 srd_decoder_load_all();
295 fail_unless(srd_decoder_list() == NULL);
300 * Check whether srd_decoder_list() without prior srd_init() and without
301 * prior srd_decoder_load_all() returns an empty list.
302 * If it returns a non-empty list (or segfaults) this test will fail.
304 START_TEST(test_decoder_list_no_init_no_load)
306 fail_unless(srd_decoder_list() == NULL);
311 * Check whether srd_decoder_list() returns the correct number of PDs.
312 * If it returns a wrong number (or segfaults) this test will fail.
314 START_TEST(test_decoder_list_correct_numbers)
316 srd_init(DECODERS_TESTDIR);
317 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 0);
318 srd_decoder_load("spi");
319 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 1);
320 srd_decoder_load("uart");
321 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 2);
322 srd_decoder_load("can");
323 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 3);
324 srd_decoder_load("can"); /* Load same PD twice. */
325 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 3);
331 * Check whether srd_decoder_get_by_id() works.
332 * If it returns NULL for valid PDs (or segfaults) this test will fail.
334 START_TEST(test_get_by_id)
336 srd_init(DECODERS_TESTDIR);
337 srd_decoder_load("uart");
338 fail_unless(srd_decoder_get_by_id("uart") != NULL);
339 fail_unless(srd_decoder_get_by_id("can") == NULL);
340 srd_decoder_load("can");
341 fail_unless(srd_decoder_get_by_id("uart") != NULL);
342 fail_unless(srd_decoder_get_by_id("can") != NULL);
348 * Check whether srd_decoder_get_by_id() works multiple times in a row.
349 * If it returns NULL for valid PDs (or segfaults) this test will fail.
351 START_TEST(test_get_by_id_multiple)
353 srd_init(DECODERS_TESTDIR);
354 srd_decoder_load("uart");
355 fail_unless(srd_decoder_get_by_id("uart") != NULL);
356 fail_unless(srd_decoder_get_by_id("uart") != NULL);
357 fail_unless(srd_decoder_get_by_id("uart") != NULL);
358 fail_unless(srd_decoder_get_by_id("uart") != NULL);
364 * Check whether srd_decoder_get_by_id() fails for bogus PDs.
365 * If it returns a value != NULL (or segfaults) this test will fail.
367 START_TEST(test_get_by_id_bogus)
369 srd_init(DECODERS_TESTDIR);
370 fail_unless(srd_decoder_get_by_id(NULL) == NULL);
371 fail_unless(srd_decoder_get_by_id("") == NULL);
372 fail_unless(srd_decoder_get_by_id(" ") == NULL);
373 fail_unless(srd_decoder_get_by_id("nonexisting") == NULL);
374 fail_unless(srd_decoder_get_by_id("sPi") == NULL);
375 fail_unless(srd_decoder_get_by_id("SPI") == NULL);
376 fail_unless(srd_decoder_get_by_id("s p i") == NULL);
377 fail_unless(srd_decoder_get_by_id(" spi") == NULL);
378 fail_unless(srd_decoder_get_by_id("spi ") == NULL);
379 fail_unless(srd_decoder_get_by_id(" spi ") == NULL);
380 fail_unless(srd_decoder_get_by_id("spi uart") == NULL);
386 * Check whether srd_decoder_doc_get() works.
387 * If it returns NULL for valid PDs (or segfaults) this test will fail.
389 START_TEST(test_doc_get)
391 struct srd_decoder *dec;
393 srd_init(DECODERS_TESTDIR);
394 srd_decoder_load("uart");
395 dec = srd_decoder_get_by_id("uart");
396 fail_unless(srd_decoder_doc_get(dec) != NULL);
402 * Check whether srd_decoder_doc_get() fails with NULL as argument.
403 * If it returns a value != NULL (or segfaults) this test will fail.
404 * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=179
406 START_TEST(test_doc_get_null)
408 srd_init(DECODERS_TESTDIR);
409 fail_unless(srd_decoder_doc_get(NULL) == NULL);
414 Suite *suite_decoder(void)
419 s = suite_create("decoder");
421 tc = tcase_create("load");
422 tcase_set_timeout(tc, 0);
423 tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown);
424 tcase_add_test(tc, test_load_all);
425 tcase_add_test(tc, test_load_all_no_init);
426 tcase_add_test(tc, test_load);
427 tcase_add_test(tc, test_load_bogus);
428 tcase_add_test(tc, test_load_valid_and_bogus);
429 tcase_add_test(tc, test_load_multiple);
430 tcase_add_test(tc, test_load_nonexisting_pd_dir);
431 suite_add_tcase(s, tc);
433 tc = tcase_create("unload");
434 tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown);
435 tcase_add_test(tc, test_unload_all);
436 tcase_add_test(tc, test_unload_all_no_init);
437 tcase_add_test(tc, test_unload_all_multiple);
438 tcase_add_test(tc, test_unload_all_multiple_noload);
439 tcase_add_test(tc, test_unload);
440 tcase_add_test(tc, test_unload_null);
441 tcase_add_test(tc, test_unload_null_no_init);
442 suite_add_tcase(s, tc);
444 tc = tcase_create("list");
445 tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown);
446 tcase_add_test(tc, test_decoder_list);
447 tcase_add_test(tc, test_decoder_list_no_load);
448 tcase_add_test(tc, test_decoder_list_no_init);
449 tcase_add_test(tc, test_decoder_list_no_init_no_load);
450 tcase_add_test(tc, test_decoder_list_correct_numbers);
451 suite_add_tcase(s, tc);
453 tc = tcase_create("get_by_id");
454 tcase_add_test(tc, test_get_by_id);
455 tcase_add_test(tc, test_get_by_id_multiple);
456 tcase_add_test(tc, test_get_by_id_bogus);
457 suite_add_tcase(s, tc);
459 tc = tcase_create("doc_get");
460 tcase_add_test(tc, test_doc_get);
461 tcase_add_test(tc, test_doc_get_null);
462 suite_add_tcase(s, tc);