]> sigrok.org Git - libsigrokdecode.git/blob - tests/check_decoder.c
Turn off excessive logging
[libsigrokdecode.git] / tests / check_decoder.c
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
21 #include "../libsigrokdecode.h" /* First, to avoid compiler warning. */
22 #include <stdlib.h>
23 #include <check.h>
24
25 static void setup(void)
26 {
27         /* Silence libsigrokdecode while the unit tests run. */
28         srd_log_loglevel_set(SRD_LOG_NONE);
29 }
30
31 static void teardown(void)
32 {
33 }
34
35 /*
36  * Check whether srd_decoder_load_all() works.
37  * If it returns != SRD_OK (or segfaults) this test will fail.
38  */
39 START_TEST(test_load_all)
40 {
41         int ret;
42
43         srd_init(NULL);
44         ret = srd_decoder_load_all();
45         fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret);
46         srd_exit();
47 }
48 END_TEST
49
50 /*
51  * Check whether srd_decoder_load_all() fails without prior srd_init().
52  * If it returns != SRD_OK (or segfaults) this test will fail.
53  * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=178
54  */
55 START_TEST(test_load_all_no_init)
56 {
57         int ret;
58
59         ret = srd_decoder_load_all();
60         fail_unless(ret != SRD_OK, "srd_decoder_load_all() didn't fail properly.");
61 }
62 END_TEST
63
64 /*
65  * Check whether srd_decoder_load() works.
66  * If it returns != SRD_OK (or segfaults) this test will fail.
67  */
68 START_TEST(test_load)
69 {
70         int ret;
71
72         srd_init(NULL);
73         ret = srd_decoder_load("uart");
74         fail_unless(ret == SRD_OK, "srd_decoder_load(uart) failed: %d.", ret);
75         ret = srd_decoder_load("spi");
76         fail_unless(ret == SRD_OK, "srd_decoder_load(spi) failed: %d.", ret);
77         ret = srd_decoder_load("usb_signalling");
78         fail_unless(ret == SRD_OK, "srd_decoder_load(usb_signalling) failed: %d.", ret);
79         srd_exit();
80 }
81 END_TEST
82
83 /*
84  * Check whether srd_decoder_load() fails for non-existing or bogus PDs.
85  * If it returns SRD_OK (or segfaults) this test will fail.
86  */
87 START_TEST(test_load_bogus)
88 {
89         srd_init(NULL);
90         /* http://sigrok.org/bugzilla/show_bug.cgi?id=176 */
91         fail_unless(srd_decoder_load(NULL) != SRD_OK);
92         fail_unless(srd_decoder_load("") != SRD_OK);
93         fail_unless(srd_decoder_load(" ") != SRD_OK);
94         fail_unless(srd_decoder_load("nonexisting") != SRD_OK);
95         fail_unless(srd_decoder_load("UART") != SRD_OK);
96         fail_unless(srd_decoder_load("UaRt") != SRD_OK);
97         fail_unless(srd_decoder_load("u a r t") != SRD_OK);
98         fail_unless(srd_decoder_load("uart ") != SRD_OK);
99         fail_unless(srd_decoder_load(" uart") != SRD_OK);
100         fail_unless(srd_decoder_load(" uart ") != SRD_OK);
101         fail_unless(srd_decoder_load("uart spi") != SRD_OK);
102         srd_exit();
103 }
104 END_TEST
105
106 /*
107  * Check whether srd_decoder_load() works/fails for valid/bogus PDs.
108  * If it returns incorrect values (or segfaults) this test will fail.
109  */
110 START_TEST(test_load_valid_and_bogus)
111 {
112         srd_init(NULL);
113         fail_unless(srd_decoder_load("") != SRD_OK);
114         fail_unless(srd_decoder_load("uart") == SRD_OK);
115         fail_unless(srd_decoder_load("") != SRD_OK);
116         fail_unless(srd_decoder_load("spi") == SRD_OK);
117         fail_unless(srd_decoder_load("") != SRD_OK);
118         fail_unless(srd_decoder_load("can") == SRD_OK);
119         fail_unless(srd_decoder_load("") != SRD_OK);
120         srd_exit();
121 }
122 END_TEST
123
124 /*
125  * Check whether srd_decoder_load() fails when run multiple times.
126  * If it returns a value != SRD_OK (or segfaults) this test will fail.
127  * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=177
128  */
129 START_TEST(test_load_multiple)
130 {
131         int ret;
132
133         srd_init(NULL);
134         ret = srd_decoder_load("uart");
135         fail_unless(ret == SRD_OK, "Loading uart PD 1x failed: %d", ret);
136         ret = srd_decoder_load("uart");
137         fail_unless(ret == SRD_OK, "Loading uart PD 2x failed: %d", ret);
138         ret = srd_decoder_load("uart");
139         fail_unless(ret == SRD_OK, "Loading uart PD 3x failed: %d", ret);
140         srd_exit();
141 }
142 END_TEST
143
144 /*
145  * Check whether srd_decoder_load() fails if a non-existing PD dir is used.
146  * If it returns SRD_OK (or segfaults) this test will fail.
147  */
148 START_TEST(test_load_nonexisting_pd_dir)
149 {
150 #if 0
151         /* TODO: Build libsigrokdecode with no default PD dir. */
152         srd_init("/nonexisting_dir");
153         fail_unless(srd_decoder_load("spi") != SRD_OK);
154         fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 0);
155         srd_exit();
156 #endif
157 }
158 END_TEST
159
160 /*
161  * Check whether srd_decoder_list() returns a non-empty list.
162  * If it returns an empty list (or segfaults) this test will fail.
163  */
164 START_TEST(test_decoder_list)
165 {
166         srd_init(NULL);
167         srd_decoder_load_all();
168         fail_unless(srd_decoder_list() != NULL);
169         srd_exit();
170 }
171 END_TEST
172
173 /*
174  * Check whether srd_decoder_list() without prior srd_decoder_load_all()
175  * returns an empty list (return value != NULL).
176  * If it returns a non-empty list (or segfaults) this test will fail.
177  */
178 START_TEST(test_decoder_list_no_load)
179 {
180         srd_init(NULL);
181         fail_unless(srd_decoder_list() == NULL);
182         srd_exit();
183 }
184 END_TEST
185
186 /*
187  * Check whether srd_decoder_list() without prior srd_init()
188  * returns an empty list.
189  * If it returns a non-empty list (or segfaults) this test will fail.
190  * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=178
191  */
192 START_TEST(test_decoder_list_no_init)
193 {
194         srd_decoder_load_all();
195         fail_unless(srd_decoder_list() == NULL);
196 }
197 END_TEST
198
199 /*
200  * Check whether srd_decoder_list() without prior srd_init() and without
201  * prior srd_decoder_load_all() returns an empty list.
202  * If it returns a non-empty list (or segfaults) this test will fail.
203  */
204 START_TEST(test_decoder_list_no_init_no_load)
205 {
206         fail_unless(srd_decoder_list() == NULL);
207 }
208 END_TEST
209
210 /*
211  * Check whether srd_decoder_list() returns the correct number of PDs.
212  * If it returns a wrong number (or segfaults) this test will fail.
213  */
214 START_TEST(test_decoder_list_correct_numbers)
215 {
216         srd_init(NULL);
217         fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 0);
218         srd_decoder_load("spi");
219         fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 1);
220         srd_decoder_load("uart");
221         fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 2);
222         srd_decoder_load("can");
223         fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 3);
224         srd_decoder_load("can"); /* Load same PD twice. */
225         fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 3);
226         srd_exit();
227 }
228 END_TEST
229
230 /*
231  * Check whether srd_decoder_get_by_id() works.
232  * If it returns NULL for valid PDs (or segfaults) this test will fail.
233  */
234 START_TEST(test_get_by_id)
235 {
236         srd_init(NULL);
237         srd_decoder_load("uart");
238         fail_unless(srd_decoder_get_by_id("uart") != NULL);
239         fail_unless(srd_decoder_get_by_id("can") == NULL);
240         srd_decoder_load("can");
241         fail_unless(srd_decoder_get_by_id("uart") != NULL);
242         fail_unless(srd_decoder_get_by_id("can") != NULL);
243         srd_exit();
244 }
245 END_TEST
246
247 /*
248  * Check whether srd_decoder_get_by_id() works multiple times in a row.
249  * If it returns NULL for valid PDs (or segfaults) this test will fail.
250  */
251 START_TEST(test_get_by_id_multiple)
252 {
253         srd_init(NULL);
254         srd_decoder_load("uart");
255         fail_unless(srd_decoder_get_by_id("uart") != NULL);
256         fail_unless(srd_decoder_get_by_id("uart") != NULL);
257         fail_unless(srd_decoder_get_by_id("uart") != NULL);
258         fail_unless(srd_decoder_get_by_id("uart") != NULL);
259         srd_exit();
260 }
261 END_TEST
262
263 /*
264  * Check whether srd_decoder_get_by_id() fails for bogus PDs.
265  * If it returns a value != NULL (or segfaults) this test will fail.
266  */
267 START_TEST(test_get_by_id_bogus)
268 {
269         srd_init(NULL);
270         fail_unless(srd_decoder_get_by_id(NULL) == NULL);
271         fail_unless(srd_decoder_get_by_id("") == NULL);
272         fail_unless(srd_decoder_get_by_id(" ") == NULL);
273         fail_unless(srd_decoder_get_by_id("nonexisting") == NULL);
274         fail_unless(srd_decoder_get_by_id("sPi") == NULL);
275         fail_unless(srd_decoder_get_by_id("SPI") == NULL);
276         fail_unless(srd_decoder_get_by_id("s p i") == NULL);
277         fail_unless(srd_decoder_get_by_id(" spi") == NULL);
278         fail_unless(srd_decoder_get_by_id("spi ") == NULL);
279         fail_unless(srd_decoder_get_by_id(" spi ") == NULL);
280         fail_unless(srd_decoder_get_by_id("spi uart") == NULL);
281         srd_exit();
282 }
283 END_TEST
284
285 /*
286  * Check whether srd_decoder_doc_get() works.
287  * If it returns NULL for valid PDs (or segfaults) this test will fail.
288  */
289 START_TEST(test_doc_get)
290 {
291         struct srd_decoder *dec;
292
293         srd_init(NULL);
294         srd_decoder_load("uart");
295         dec = srd_decoder_get_by_id("uart");
296         fail_unless(srd_decoder_doc_get(dec) != NULL);
297         srd_exit();
298 }
299 END_TEST
300
301 /*
302  * Check whether srd_decoder_doc_get() fails with NULL as argument.
303  * If it returns a value != NULL (or segfaults) this test will fail.
304  * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=179
305  */
306 START_TEST(test_doc_get_null)
307 {
308         srd_init(NULL);
309         fail_unless(srd_decoder_doc_get(NULL) == NULL);
310         srd_exit();
311 }
312 END_TEST
313
314 Suite *suite_decoder(void)
315 {
316         Suite *s;
317         TCase *tc;
318
319         s = suite_create("decoder");
320
321         tc = tcase_create("load");
322         tcase_add_checked_fixture(tc, setup, teardown);
323         tcase_add_test(tc, test_load_all);
324         tcase_add_test(tc, test_load_all_no_init);
325         tcase_add_test(tc, test_load);
326         tcase_add_test(tc, test_load_bogus);
327         tcase_add_test(tc, test_load_valid_and_bogus);
328         tcase_add_test(tc, test_load_multiple);
329         tcase_add_test(tc, test_load_nonexisting_pd_dir);
330         suite_add_tcase(s, tc);
331
332         tc = tcase_create("list");
333         tcase_add_checked_fixture(tc, setup, teardown);
334         tcase_add_test(tc, test_decoder_list);
335         tcase_add_test(tc, test_decoder_list_no_load);
336         tcase_add_test(tc, test_decoder_list_no_init);
337         tcase_add_test(tc, test_decoder_list_no_init_no_load);
338         tcase_add_test(tc, test_decoder_list_correct_numbers);
339         suite_add_tcase(s, tc);
340
341         tc = tcase_create("get_by_id");
342         tcase_add_test(tc, test_get_by_id);
343         tcase_add_test(tc, test_get_by_id_multiple);
344         tcase_add_test(tc, test_get_by_id_bogus);
345         suite_add_tcase(s, tc);
346
347         tc = tcase_create("doc_get");
348         tcase_add_test(tc, test_doc_get);
349         tcase_add_test(tc, test_doc_get_null);
350         suite_add_tcase(s, tc);
351
352         return s;
353 }