]> sigrok.org Git - libsigrokdecode.git/blame - tests/decoder.c
counter: explicit string formatting for annotation text
[libsigrokdecode.git] / tests / decoder.c
CommitLineData
3ad11099
UH
1/*
2 * This file is part of the libsigrokdecode project.
3 *
4 * Copyright (C) 2013 Uwe Hermann <uwe@hermann-uwe.de>
5 *
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.
10 *
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.
15 *
16 * You should have received a copy of the GNU General Public License
4539e9ca 17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
3ad11099
UH
18 */
19
36784362 20#include <config.h>
b480383d 21#include <libsigrokdecode.h> /* First, to avoid compiler warning. */
3ad11099
UH
22#include <stdlib.h>
23#include <check.h>
b9223384 24#include "lib.h"
3ad11099
UH
25
26/*
27 * Check whether srd_decoder_load_all() works.
28 * If it returns != SRD_OK (or segfaults) this test will fail.
29 */
30START_TEST(test_load_all)
31{
32 int ret;
33
41bab682 34 srd_init(DECODERS_TESTDIR);
3ad11099
UH
35 ret = srd_decoder_load_all();
36 fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret);
37 srd_exit();
38}
39END_TEST
40
9b9ff999
UH
41/*
42 * Check whether srd_decoder_load_all() fails without prior srd_init().
43 * If it returns != SRD_OK (or segfaults) this test will fail.
44 * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=178
45 */
46START_TEST(test_load_all_no_init)
47{
48 int ret;
49
50 ret = srd_decoder_load_all();
a8c76548 51 fail_unless(ret != SRD_OK, "srd_decoder_load_all() didn't fail properly.");
9b9ff999
UH
52}
53END_TEST
54
3ad11099
UH
55/*
56 * Check whether srd_decoder_load() works.
57 * If it returns != SRD_OK (or segfaults) this test will fail.
58 */
59START_TEST(test_load)
60{
61 int ret;
62
41bab682 63 srd_init(DECODERS_TESTDIR);
3ad11099
UH
64 ret = srd_decoder_load("uart");
65 fail_unless(ret == SRD_OK, "srd_decoder_load(uart) failed: %d.", ret);
66 ret = srd_decoder_load("spi");
67 fail_unless(ret == SRD_OK, "srd_decoder_load(spi) failed: %d.", ret);
68 ret = srd_decoder_load("usb_signalling");
69 fail_unless(ret == SRD_OK, "srd_decoder_load(usb_signalling) failed: %d.", ret);
70 srd_exit();
71}
72END_TEST
73
74/*
75 * Check whether srd_decoder_load() fails for non-existing or bogus PDs.
76 * If it returns SRD_OK (or segfaults) this test will fail.
77 */
78START_TEST(test_load_bogus)
79{
41bab682 80 srd_init(DECODERS_TESTDIR);
9b9ff999 81 /* http://sigrok.org/bugzilla/show_bug.cgi?id=176 */
3ad11099
UH
82 fail_unless(srd_decoder_load(NULL) != SRD_OK);
83 fail_unless(srd_decoder_load("") != SRD_OK);
84 fail_unless(srd_decoder_load(" ") != SRD_OK);
85 fail_unless(srd_decoder_load("nonexisting") != SRD_OK);
86 fail_unless(srd_decoder_load("UART") != SRD_OK);
87 fail_unless(srd_decoder_load("UaRt") != SRD_OK);
88 fail_unless(srd_decoder_load("u a r t") != SRD_OK);
89 fail_unless(srd_decoder_load("uart ") != 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 spi") != SRD_OK);
93 srd_exit();
94}
95END_TEST
96
9b9ff999
UH
97/*
98 * Check whether srd_decoder_load() works/fails for valid/bogus PDs.
99 * If it returns incorrect values (or segfaults) this test will fail.
100 */
101START_TEST(test_load_valid_and_bogus)
102{
41bab682 103 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
104 fail_unless(srd_decoder_load("") != SRD_OK);
105 fail_unless(srd_decoder_load("uart") == SRD_OK);
106 fail_unless(srd_decoder_load("") != SRD_OK);
107 fail_unless(srd_decoder_load("spi") == SRD_OK);
108 fail_unless(srd_decoder_load("") != SRD_OK);
109 fail_unless(srd_decoder_load("can") == SRD_OK);
110 fail_unless(srd_decoder_load("") != SRD_OK);
111 srd_exit();
112}
113END_TEST
114
115/*
116 * Check whether srd_decoder_load() fails when run multiple times.
117 * If it returns a value != SRD_OK (or segfaults) this test will fail.
118 * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=177
119 */
120START_TEST(test_load_multiple)
121{
122 int ret;
123
41bab682 124 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
125 ret = srd_decoder_load("uart");
126 fail_unless(ret == SRD_OK, "Loading uart PD 1x failed: %d", ret);
127 ret = srd_decoder_load("uart");
128 fail_unless(ret == SRD_OK, "Loading uart PD 2x failed: %d", ret);
129 ret = srd_decoder_load("uart");
130 fail_unless(ret == SRD_OK, "Loading uart PD 3x failed: %d", ret);
131 srd_exit();
132}
133END_TEST
134
135/*
136 * Check whether srd_decoder_load() fails if a non-existing PD dir is used.
137 * If it returns SRD_OK (or segfaults) this test will fail.
138 */
139START_TEST(test_load_nonexisting_pd_dir)
140{
141#if 0
142 /* TODO: Build libsigrokdecode with no default PD dir. */
143 srd_init("/nonexisting_dir");
144 fail_unless(srd_decoder_load("spi") != SRD_OK);
145 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 0);
146 srd_exit();
147#endif
148}
149END_TEST
150
1b6f39e3
UH
151/*
152 * Check whether srd_decoder_unload_all() works.
153 * If it returns != SRD_OK (or segfaults) this test will fail.
154 */
155START_TEST(test_unload_all)
156{
157 int ret;
158
159 srd_init(DECODERS_TESTDIR);
160 ret = srd_decoder_load_all();
161 fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret);
162 ret = srd_decoder_unload_all();
163 fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret);
164 srd_exit();
165}
166END_TEST
167
168/*
169 * Check whether srd_decoder_unload_all() works without prior srd_init().
170 * If it returns != SRD_OK (or segfaults) this test will fail.
171 */
172START_TEST(test_unload_all_no_init)
173{
174 int ret;
175
176 ret = srd_decoder_unload_all();
177 fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret);
178}
179END_TEST
180
181/*
182 * Check whether srd_decoder_unload_all() works multiple times.
183 * If it returns != SRD_OK (or segfaults) this test will fail.
184 */
185START_TEST(test_unload_all_multiple)
186{
187 int ret, i;
188
189 srd_init(DECODERS_TESTDIR);
190 for (i = 0; i < 10; i++) {
191 ret = srd_decoder_load_all();
192 fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret);
193 ret = srd_decoder_unload_all();
194 fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret);
195 }
196 srd_exit();
197}
198END_TEST
199
200/*
201 * Check whether srd_decoder_unload_all() works multiple times (no load).
202 * If it returns != SRD_OK (or segfaults) this test will fail.
203 */
204START_TEST(test_unload_all_multiple_noload)
205{
206 int ret, i;
207
208 srd_init(DECODERS_TESTDIR);
209 for (i = 0; i < 10; i++) {
210 ret = srd_decoder_unload_all();
211 fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret);
212 }
213 srd_exit();
214}
215END_TEST
216
217/*
218 * Check whether srd_decoder_unload() works.
219 * If it returns != SRD_OK (or segfaults) this test will fail.
220 */
221START_TEST(test_unload)
222{
223 int ret;
224 struct srd_decoder *dec;
225
226 srd_init(DECODERS_TESTDIR);
227 ret = srd_decoder_load("uart");
228 fail_unless(ret == SRD_OK, "srd_decoder_load(uart) failed: %d.", ret);
229 dec = srd_decoder_get_by_id("uart");
230 fail_unless(dec != NULL);
231 ret = srd_decoder_unload(dec);
232 fail_unless(ret == SRD_OK, "srd_decoder_unload() failed: %d.", ret);
233 srd_exit();
234}
235END_TEST
236
237/*
238 * Check whether srd_decoder_unload(NULL) fails.
239 * If it returns SRD_OK (or segfaults) this test will fail.
240 */
241START_TEST(test_unload_null)
242{
243 srd_init(DECODERS_TESTDIR);
244 fail_unless(srd_decoder_unload(NULL) != SRD_OK);
245 srd_exit();
246}
247END_TEST
248
249/*
250 * Check whether srd_decoder_unload(NULL) fails without prior srd_init().
251 * If it returns SRD_OK (or segfaults) this test will fail.
252 */
253START_TEST(test_unload_null_no_init)
254{
255 fail_unless(srd_decoder_unload(NULL) != SRD_OK);
256}
257END_TEST
258
9b9ff999
UH
259/*
260 * Check whether srd_decoder_list() returns a non-empty list.
261 * If it returns an empty list (or segfaults) this test will fail.
262 */
263START_TEST(test_decoder_list)
264{
41bab682 265 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
266 srd_decoder_load_all();
267 fail_unless(srd_decoder_list() != NULL);
268 srd_exit();
269}
270END_TEST
271
272/*
273 * Check whether srd_decoder_list() without prior srd_decoder_load_all()
274 * returns an empty list (return value != NULL).
275 * If it returns a non-empty list (or segfaults) this test will fail.
276 */
277START_TEST(test_decoder_list_no_load)
278{
41bab682 279 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
280 fail_unless(srd_decoder_list() == NULL);
281 srd_exit();
282}
283END_TEST
284
285/*
286 * Check whether srd_decoder_list() without prior srd_init()
287 * returns an empty list.
288 * If it returns a non-empty list (or segfaults) this test will fail.
289 * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=178
290 */
291START_TEST(test_decoder_list_no_init)
292{
293 srd_decoder_load_all();
294 fail_unless(srd_decoder_list() == NULL);
295}
296END_TEST
297
298/*
299 * Check whether srd_decoder_list() without prior srd_init() and without
300 * prior srd_decoder_load_all() returns an empty list.
301 * If it returns a non-empty list (or segfaults) this test will fail.
302 */
303START_TEST(test_decoder_list_no_init_no_load)
304{
305 fail_unless(srd_decoder_list() == NULL);
306}
307END_TEST
308
309/*
310 * Check whether srd_decoder_list() returns the correct number of PDs.
311 * If it returns a wrong number (or segfaults) this test will fail.
312 */
313START_TEST(test_decoder_list_correct_numbers)
314{
41bab682 315 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
316 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 0);
317 srd_decoder_load("spi");
318 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 1);
319 srd_decoder_load("uart");
320 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 2);
321 srd_decoder_load("can");
322 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 3);
323 srd_decoder_load("can"); /* Load same PD twice. */
324 fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 3);
325 srd_exit();
326}
327END_TEST
328
329/*
330 * Check whether srd_decoder_get_by_id() works.
331 * If it returns NULL for valid PDs (or segfaults) this test will fail.
332 */
333START_TEST(test_get_by_id)
334{
41bab682 335 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
336 srd_decoder_load("uart");
337 fail_unless(srd_decoder_get_by_id("uart") != NULL);
338 fail_unless(srd_decoder_get_by_id("can") == NULL);
339 srd_decoder_load("can");
340 fail_unless(srd_decoder_get_by_id("uart") != NULL);
341 fail_unless(srd_decoder_get_by_id("can") != NULL);
342 srd_exit();
343}
344END_TEST
345
346/*
347 * Check whether srd_decoder_get_by_id() works multiple times in a row.
348 * If it returns NULL for valid PDs (or segfaults) this test will fail.
349 */
350START_TEST(test_get_by_id_multiple)
351{
41bab682 352 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
353 srd_decoder_load("uart");
354 fail_unless(srd_decoder_get_by_id("uart") != NULL);
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 srd_exit();
359}
360END_TEST
361
362/*
363 * Check whether srd_decoder_get_by_id() fails for bogus PDs.
364 * If it returns a value != NULL (or segfaults) this test will fail.
365 */
366START_TEST(test_get_by_id_bogus)
367{
41bab682 368 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
369 fail_unless(srd_decoder_get_by_id(NULL) == NULL);
370 fail_unless(srd_decoder_get_by_id("") == NULL);
371 fail_unless(srd_decoder_get_by_id(" ") == NULL);
372 fail_unless(srd_decoder_get_by_id("nonexisting") == NULL);
373 fail_unless(srd_decoder_get_by_id("sPi") == NULL);
374 fail_unless(srd_decoder_get_by_id("SPI") == NULL);
375 fail_unless(srd_decoder_get_by_id("s p i") == NULL);
376 fail_unless(srd_decoder_get_by_id(" spi") == 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 uart") == NULL);
380 srd_exit();
381}
382END_TEST
383
384/*
385 * Check whether srd_decoder_doc_get() works.
386 * If it returns NULL for valid PDs (or segfaults) this test will fail.
387 */
388START_TEST(test_doc_get)
389{
390 struct srd_decoder *dec;
391
41bab682 392 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
393 srd_decoder_load("uart");
394 dec = srd_decoder_get_by_id("uart");
395 fail_unless(srd_decoder_doc_get(dec) != NULL);
396 srd_exit();
397}
398END_TEST
399
400/*
401 * Check whether srd_decoder_doc_get() fails with NULL as argument.
402 * If it returns a value != NULL (or segfaults) this test will fail.
403 * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=179
404 */
405START_TEST(test_doc_get_null)
406{
41bab682 407 srd_init(DECODERS_TESTDIR);
092f1437 408 fail_unless(srd_decoder_doc_get(NULL) == NULL);
9b9ff999
UH
409 srd_exit();
410}
411END_TEST
412
3ad11099
UH
413Suite *suite_decoder(void)
414{
415 Suite *s;
416 TCase *tc;
417
418 s = suite_create("decoder");
419
420 tc = tcase_create("load");
2590c098 421 tcase_set_timeout(tc, 0);
28c3c217 422 tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown);
3ad11099 423 tcase_add_test(tc, test_load_all);
9b9ff999 424 tcase_add_test(tc, test_load_all_no_init);
3ad11099
UH
425 tcase_add_test(tc, test_load);
426 tcase_add_test(tc, test_load_bogus);
9b9ff999
UH
427 tcase_add_test(tc, test_load_valid_and_bogus);
428 tcase_add_test(tc, test_load_multiple);
429 tcase_add_test(tc, test_load_nonexisting_pd_dir);
430 suite_add_tcase(s, tc);
431
1b6f39e3
UH
432 tc = tcase_create("unload");
433 tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown);
434 tcase_add_test(tc, test_unload_all);
435 tcase_add_test(tc, test_unload_all_no_init);
436 tcase_add_test(tc, test_unload_all_multiple);
437 tcase_add_test(tc, test_unload_all_multiple_noload);
438 tcase_add_test(tc, test_unload);
439 tcase_add_test(tc, test_unload_null);
440 tcase_add_test(tc, test_unload_null_no_init);
441 suite_add_tcase(s, tc);
442
9b9ff999 443 tc = tcase_create("list");
28c3c217 444 tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown);
9b9ff999
UH
445 tcase_add_test(tc, test_decoder_list);
446 tcase_add_test(tc, test_decoder_list_no_load);
447 tcase_add_test(tc, test_decoder_list_no_init);
448 tcase_add_test(tc, test_decoder_list_no_init_no_load);
449 tcase_add_test(tc, test_decoder_list_correct_numbers);
450 suite_add_tcase(s, tc);
451
452 tc = tcase_create("get_by_id");
453 tcase_add_test(tc, test_get_by_id);
454 tcase_add_test(tc, test_get_by_id_multiple);
455 tcase_add_test(tc, test_get_by_id_bogus);
456 suite_add_tcase(s, tc);
457
458 tc = tcase_create("doc_get");
459 tcase_add_test(tc, test_doc_get);
460 tcase_add_test(tc, test_doc_get_null);
3ad11099
UH
461 suite_add_tcase(s, tc);
462
463 return s;
464}