X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=tests%2Fdecoder.c;h=3acabaeca30e2c7c30c910eec8ff0c61323596e1;hp=7763b0a1bc5272a91d05031dfeadca2f95f44b0b;hb=HEAD;hpb=41bab68212533f4697ad378af574e06ea83e4fd9 diff --git a/tests/decoder.c b/tests/decoder.c index 7763b0a..3acabae 100644 --- a/tests/decoder.c +++ b/tests/decoder.c @@ -14,12 +14,11 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * along with this program; if not, see . */ #include -#include "../libsigrokdecode.h" /* First, to avoid compiler warning. */ +#include /* First, to avoid compiler warning. */ #include #include #include "lib.h" @@ -149,6 +148,114 @@ START_TEST(test_load_nonexisting_pd_dir) } END_TEST +/* + * Check whether srd_decoder_unload_all() works. + * If it returns != SRD_OK (or segfaults) this test will fail. + */ +START_TEST(test_unload_all) +{ + int ret; + + srd_init(DECODERS_TESTDIR); + ret = srd_decoder_load_all(); + fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret); + ret = srd_decoder_unload_all(); + fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret); + srd_exit(); +} +END_TEST + +/* + * Check whether srd_decoder_unload_all() works without prior srd_init(). + * If it returns != SRD_OK (or segfaults) this test will fail. + */ +START_TEST(test_unload_all_no_init) +{ + int ret; + + ret = srd_decoder_unload_all(); + fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret); +} +END_TEST + +/* + * Check whether srd_decoder_unload_all() works multiple times. + * If it returns != SRD_OK (or segfaults) this test will fail. + */ +START_TEST(test_unload_all_multiple) +{ + int ret, i; + + srd_init(DECODERS_TESTDIR); + for (i = 0; i < 10; i++) { + ret = srd_decoder_load_all(); + fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret); + ret = srd_decoder_unload_all(); + fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret); + } + srd_exit(); +} +END_TEST + +/* + * Check whether srd_decoder_unload_all() works multiple times (no load). + * If it returns != SRD_OK (or segfaults) this test will fail. + */ +START_TEST(test_unload_all_multiple_noload) +{ + int ret, i; + + srd_init(DECODERS_TESTDIR); + for (i = 0; i < 10; i++) { + ret = srd_decoder_unload_all(); + fail_unless(ret == SRD_OK, "srd_decoder_unload_all() failed: %d.", ret); + } + srd_exit(); +} +END_TEST + +/* + * Check whether srd_decoder_unload() works. + * If it returns != SRD_OK (or segfaults) this test will fail. + */ +START_TEST(test_unload) +{ + int ret; + struct srd_decoder *dec; + + srd_init(DECODERS_TESTDIR); + ret = srd_decoder_load("uart"); + fail_unless(ret == SRD_OK, "srd_decoder_load(uart) failed: %d.", ret); + dec = srd_decoder_get_by_id("uart"); + fail_unless(dec != NULL); + ret = srd_decoder_unload(dec); + fail_unless(ret == SRD_OK, "srd_decoder_unload() failed: %d.", ret); + srd_exit(); +} +END_TEST + +/* + * Check whether srd_decoder_unload(NULL) fails. + * If it returns SRD_OK (or segfaults) this test will fail. + */ +START_TEST(test_unload_null) +{ + srd_init(DECODERS_TESTDIR); + fail_unless(srd_decoder_unload(NULL) != SRD_OK); + srd_exit(); +} +END_TEST + +/* + * Check whether srd_decoder_unload(NULL) fails without prior srd_init(). + * If it returns SRD_OK (or segfaults) this test will fail. + */ +START_TEST(test_unload_null_no_init) +{ + fail_unless(srd_decoder_unload(NULL) != SRD_OK); +} +END_TEST + /* * Check whether srd_decoder_list() returns a non-empty list. * If it returns an empty list (or segfaults) this test will fail. @@ -281,11 +388,14 @@ END_TEST START_TEST(test_doc_get) { struct srd_decoder *dec; + char *doc; srd_init(DECODERS_TESTDIR); srd_decoder_load("uart"); dec = srd_decoder_get_by_id("uart"); - fail_unless(srd_decoder_doc_get(dec) != NULL); + doc = srd_decoder_doc_get(dec); + fail_unless(doc != NULL); + g_free(doc); srd_exit(); } END_TEST @@ -294,11 +404,19 @@ END_TEST * Check whether srd_decoder_doc_get() fails with NULL as argument. * If it returns a value != NULL (or segfaults) this test will fail. * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=179 + * Check whether srd_decoder_doc_get() fails with dec->py_mod == NULL. + * If it returns a value != NULL (or segfaults) this test will fail. + * See also: http://sigrok.org/bugzilla/show_bug.cgi?id=180 */ START_TEST(test_doc_get_null) { + struct srd_decoder dec; + + dec.py_mod = NULL; + srd_init(DECODERS_TESTDIR); fail_unless(srd_decoder_doc_get(NULL) == NULL); + fail_unless(srd_decoder_doc_get(&dec) == NULL); srd_exit(); } END_TEST @@ -322,6 +440,17 @@ Suite *suite_decoder(void) tcase_add_test(tc, test_load_nonexisting_pd_dir); suite_add_tcase(s, tc); + tc = tcase_create("unload"); + tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown); + tcase_add_test(tc, test_unload_all); + tcase_add_test(tc, test_unload_all_no_init); + tcase_add_test(tc, test_unload_all_multiple); + tcase_add_test(tc, test_unload_all_multiple_noload); + tcase_add_test(tc, test_unload); + tcase_add_test(tc, test_unload_null); + tcase_add_test(tc, test_unload_null_no_init); + suite_add_tcase(s, tc); + tc = tcase_create("list"); tcase_add_checked_fixture(tc, srdtest_setup, srdtest_teardown); tcase_add_test(tc, test_decoder_list);