]> sigrok.org Git - libsigrokdecode.git/blame - tests/inst.c
tests: Rename DECODERS_DIR to DECODERS_TESTDIR
[libsigrokdecode.git] / tests / inst.c
CommitLineData
368b406e
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>
368b406e
UH
22#include "../libsigrokdecode.h" /* First, to avoid compiler warning. */
23#include <stdlib.h>
24#include <check.h>
b9223384 25#include "lib.h"
368b406e 26
368b406e
UH
27/*
28 * Check whether srd_inst_new() works.
29 * If it returns NULL (or segfaults) this test will fail.
30 */
31START_TEST(test_inst_new)
32{
33 struct srd_session *sess;
34 struct srd_decoder_inst *inst;
35
41bab682 36 srd_init(DECODERS_TESTDIR);
368b406e
UH
37 srd_decoder_load("uart");
38 srd_session_new(&sess);
39 inst = srd_inst_new(sess, "uart", NULL);
40 fail_unless(inst != NULL, "srd_inst_new() failed.");
41 srd_exit();
42}
43END_TEST
44
45/*
46 * Check whether multiple srd_inst_new() calls work.
47 * If any of them returns NULL (or segfaults) this test will fail.
48 */
49START_TEST(test_inst_new_multiple)
50{
51 struct srd_session *sess;
52 struct srd_decoder_inst *inst1, *inst2, *inst3;
53
54 inst1 = inst2 = inst3 = NULL;
55
41bab682 56 srd_init(DECODERS_TESTDIR);
368b406e
UH
57 srd_decoder_load_all();
58 srd_session_new(&sess);
59
60 /* Multiple srd_inst_new() calls must work. */
61 inst1 = srd_inst_new(sess, "uart", NULL);
62 fail_unless(inst1 != NULL, "srd_inst_new() 1 failed.");
63 inst2 = srd_inst_new(sess, "spi", NULL);
64 fail_unless(inst2 != NULL, "srd_inst_new() 2 failed.");
65 inst3 = srd_inst_new(sess, "can", NULL);
66 fail_unless(inst3 != NULL, "srd_inst_new() 3 failed.");
67
68 /* The returned instance pointers must not be the same. */
69 fail_unless(inst1 != inst2);
70 fail_unless(inst1 != inst3);
71 fail_unless(inst2 != inst3);
72
73 /* Each instance must have another py_inst than any of the others. */
74 fail_unless(inst1->py_inst != inst2->py_inst);
75 fail_unless(inst1->py_inst != inst3->py_inst);
76 fail_unless(inst2->py_inst != inst3->py_inst);
77
78 srd_exit();
79}
80END_TEST
81
82/*
83 * Check whether srd_inst_option_set() works for an empty options hash.
84 * If it returns != SRD_OK (or segfaults) this test will fail.
85 */
86START_TEST(test_inst_option_set_empty)
87{
88 int ret;
89 struct srd_session *sess;
90 struct srd_decoder_inst *inst;
91 GHashTable *options;
92
41bab682 93 srd_init(DECODERS_TESTDIR);
368b406e
UH
94 srd_decoder_load_all();
95 srd_session_new(&sess);
96 inst = srd_inst_new(sess, "uart", NULL);
97 options = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
98 (GDestroyNotify)g_variant_unref);
99 ret = srd_inst_option_set(inst, options);
100 fail_unless(ret == SRD_OK, "srd_inst_option_set() with empty options "
101 "hash failed: %d.", ret);
102 srd_exit();
103}
104END_TEST
105
106/*
107 * Check whether srd_inst_option_set() works for bogus options.
108 * If it returns != SRD_OK (or segfaults) this test will fail.
109 */
110START_TEST(test_inst_option_set_bogus)
111{
112 int ret;
113 struct srd_session *sess;
114 struct srd_decoder_inst *inst;
115 GHashTable *options;
116
41bab682 117 srd_init(DECODERS_TESTDIR);
368b406e
UH
118 srd_decoder_load_all();
119 srd_session_new(&sess);
120 inst = srd_inst_new(sess, "uart", NULL);
121
122 options = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
123 (GDestroyNotify)g_variant_unref);
124
125 /* NULL instance. */
126 ret = srd_inst_option_set(NULL, options);
127 fail_unless(ret != SRD_OK, "srd_inst_option_set() with NULL "
128 "instance failed: %d.", ret);
129
130 /* NULL 'options' GHashTable. */
131 ret = srd_inst_option_set(inst, NULL);
132 fail_unless(ret != SRD_OK, "srd_inst_option_set() with NULL "
133 "options hash failed: %d.", ret);
134
135 /* NULL instance and NULL 'options' GHashTable. */
136 ret = srd_inst_option_set(NULL, NULL);
137 fail_unless(ret != SRD_OK, "srd_inst_option_set() with NULL "
138 "instance and NULL options hash failed: %d.", ret);
139
140 srd_exit();
141}
142END_TEST
143
144Suite *suite_inst(void)
145{
146 Suite *s;
147 TCase *tc;
148
149 s = suite_create("inst");
150
151 tc = tcase_create("new");
28c3c217 152 tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown);
368b406e
UH
153 tcase_add_test(tc, test_inst_new);
154 tcase_add_test(tc, test_inst_new_multiple);
155 suite_add_tcase(s, tc);
156
157 tc = tcase_create("option");
28c3c217 158 tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown);
368b406e
UH
159 tcase_add_test(tc, test_inst_option_set_empty);
160 tcase_add_test(tc, test_inst_option_set_bogus);
161 suite_add_tcase(s, tc);
162
163 return s;
164}