]> sigrok.org Git - libsigrokdecode.git/blame - tests/decoder.c
Add an MDIO protocol decoder.
[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
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
19 */
20
36784362 21#include <config.h>
b480383d 22#include <libsigrokdecode.h> /* First, to avoid compiler warning. */
3ad11099
UH
23#include <stdlib.h>
24#include <check.h>
b9223384 25#include "lib.h"
3ad11099
UH
26
27/*
28 * Check whether srd_decoder_load_all() works.
29 * If it returns != SRD_OK (or segfaults) this test will fail.
30 */
31START_TEST(test_load_all)
32{
33 int ret;
34
41bab682 35 srd_init(DECODERS_TESTDIR);
3ad11099
UH
36 ret = srd_decoder_load_all();
37 fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret);
38 srd_exit();
39}
40END_TEST
41
9b9ff999
UH
42/*
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
46 */
47START_TEST(test_load_all_no_init)
48{
49 int ret;
50
51 ret = srd_decoder_load_all();
a8c76548 52 fail_unless(ret != SRD_OK, "srd_decoder_load_all() didn't fail properly.");
9b9ff999
UH
53}
54END_TEST
55
3ad11099
UH
56/*
57 * Check whether srd_decoder_load() works.
58 * If it returns != SRD_OK (or segfaults) this test will fail.
59 */
60START_TEST(test_load)
61{
62 int ret;
63
41bab682 64 srd_init(DECODERS_TESTDIR);
3ad11099
UH
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);
71 srd_exit();
72}
73END_TEST
74
75/*
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.
78 */
79START_TEST(test_load_bogus)
80{
41bab682 81 srd_init(DECODERS_TESTDIR);
9b9ff999 82 /* http://sigrok.org/bugzilla/show_bug.cgi?id=176 */
3ad11099
UH
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);
94 srd_exit();
95}
96END_TEST
97
9b9ff999
UH
98/*
99 * Check whether srd_decoder_load() works/fails for valid/bogus PDs.
100 * If it returns incorrect values (or segfaults) this test will fail.
101 */
102START_TEST(test_load_valid_and_bogus)
103{
41bab682 104 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
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);
112 srd_exit();
113}
114END_TEST
115
116/*
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
120 */
121START_TEST(test_load_multiple)
122{
123 int ret;
124
41bab682 125 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
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);
132 srd_exit();
133}
134END_TEST
135
136/*
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.
139 */
140START_TEST(test_load_nonexisting_pd_dir)
141{
142#if 0
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);
147 srd_exit();
148#endif
149}
150END_TEST
151
1b6f39e3
UH
152/*
153 * Check whether srd_decoder_unload_all() works.
154 * If it returns != SRD_OK (or segfaults) this test will fail.
155 */
156START_TEST(test_unload_all)
157{
158 int ret;
159
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);
165 srd_exit();
166}
167END_TEST
168
169/*
170 * Check whether srd_decoder_unload_all() works without prior srd_init().
171 * If it returns != SRD_OK (or segfaults) this test will fail.
172 */
173START_TEST(test_unload_all_no_init)
174{
175 int ret;
176
177 ret = srd_decoder_unload_all();
178 fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret);
179}
180END_TEST
181
182/*
183 * Check whether srd_decoder_unload_all() works multiple times.
184 * If it returns != SRD_OK (or segfaults) this test will fail.
185 */
186START_TEST(test_unload_all_multiple)
187{
188 int ret, i;
189
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);
196 }
197 srd_exit();
198}
199END_TEST
200
201/*
202 * Check whether srd_decoder_unload_all() works multiple times (no load).
203 * If it returns != SRD_OK (or segfaults) this test will fail.
204 */
205START_TEST(test_unload_all_multiple_noload)
206{
207 int ret, i;
208
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);
213 }
214 srd_exit();
215}
216END_TEST
217
218/*
219 * Check whether srd_decoder_unload() works.
220 * If it returns != SRD_OK (or segfaults) this test will fail.
221 */
222START_TEST(test_unload)
223{
224 int ret;
225 struct srd_decoder *dec;
226
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);
234 srd_exit();
235}
236END_TEST
237
238/*
239 * Check whether srd_decoder_unload(NULL) fails.
240 * If it returns SRD_OK (or segfaults) this test will fail.
241 */
242START_TEST(test_unload_null)
243{
244 srd_init(DECODERS_TESTDIR);
245 fail_unless(srd_decoder_unload(NULL) != SRD_OK);
246 srd_exit();
247}
248END_TEST
249
250/*
251 * Check whether srd_decoder_unload(NULL) fails without prior srd_init().
252 * If it returns SRD_OK (or segfaults) this test will fail.
253 */
254START_TEST(test_unload_null_no_init)
255{
256 fail_unless(srd_decoder_unload(NULL) != SRD_OK);
257}
258END_TEST
259
9b9ff999
UH
260/*
261 * Check whether srd_decoder_list() returns a non-empty list.
262 * If it returns an empty list (or segfaults) this test will fail.
263 */
264START_TEST(test_decoder_list)
265{
41bab682 266 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
267 srd_decoder_load_all();
268 fail_unless(srd_decoder_list() != NULL);
269 srd_exit();
270}
271END_TEST
272
273/*
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.
277 */
278START_TEST(test_decoder_list_no_load)
279{
41bab682 280 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
281 fail_unless(srd_decoder_list() == NULL);
282 srd_exit();
283}
284END_TEST
285
286/*
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
291 */
292START_TEST(test_decoder_list_no_init)
293{
294 srd_decoder_load_all();
295 fail_unless(srd_decoder_list() == NULL);
296}
297END_TEST
298
299/*
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.
303 */
304START_TEST(test_decoder_list_no_init_no_load)
305{
306 fail_unless(srd_decoder_list() == NULL);
307}
308END_TEST
309
310/*
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.
313 */
314START_TEST(test_decoder_list_correct_numbers)
315{
41bab682 316 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
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);
326 srd_exit();
327}
328END_TEST
329
330/*
331 * Check whether srd_decoder_get_by_id() works.
332 * If it returns NULL for valid PDs (or segfaults) this test will fail.
333 */
334START_TEST(test_get_by_id)
335{
41bab682 336 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
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);
343 srd_exit();
344}
345END_TEST
346
347/*
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.
350 */
351START_TEST(test_get_by_id_multiple)
352{
41bab682 353 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
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);
359 srd_exit();
360}
361END_TEST
362
363/*
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.
366 */
367START_TEST(test_get_by_id_bogus)
368{
41bab682 369 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
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);
381 srd_exit();
382}
383END_TEST
384
385/*
386 * Check whether srd_decoder_doc_get() works.
387 * If it returns NULL for valid PDs (or segfaults) this test will fail.
388 */
389START_TEST(test_doc_get)
390{
391 struct srd_decoder *dec;
392
41bab682 393 srd_init(DECODERS_TESTDIR);
9b9ff999
UH
394 srd_decoder_load("uart");
395 dec = srd_decoder_get_by_id("uart");
396 fail_unless(srd_decoder_doc_get(dec) != NULL);
397 srd_exit();
398}
399END_TEST
400
401/*
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
405 */
406START_TEST(test_doc_get_null)
407{
41bab682 408 srd_init(DECODERS_TESTDIR);
092f1437 409 fail_unless(srd_decoder_doc_get(NULL) == NULL);
9b9ff999
UH
410 srd_exit();
411}
412END_TEST
413
3ad11099
UH
414Suite *suite_decoder(void)
415{
416 Suite *s;
417 TCase *tc;
418
419 s = suite_create("decoder");
420
421 tc = tcase_create("load");
2590c098 422 tcase_set_timeout(tc, 0);
28c3c217 423 tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown);
3ad11099 424 tcase_add_test(tc, test_load_all);
9b9ff999 425 tcase_add_test(tc, test_load_all_no_init);
3ad11099
UH
426 tcase_add_test(tc, test_load);
427 tcase_add_test(tc, test_load_bogus);
9b9ff999
UH
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);
432
1b6f39e3
UH
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);
443
9b9ff999 444 tc = tcase_create("list");
28c3c217 445 tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown);
9b9ff999
UH
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);
452
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);
458
459 tc = tcase_create("doc_get");
460 tcase_add_test(tc, test_doc_get);
461 tcase_add_test(tc, test_doc_get_null);
3ad11099
UH
462 suite_add_tcase(s, tc);
463
464 return s;
465}