X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=tests%2Fdecoder.c;h=3acabaeca30e2c7c30c910eec8ff0c61323596e1;hp=97d576788da45edea036c997a5adb72e3d5668e4;hb=HEAD;hpb=367843620d039ad183bc4d7c33d91c316d717621 diff --git a/tests/decoder.c b/tests/decoder.c index 97d5767..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" @@ -32,7 +31,7 @@ START_TEST(test_load_all) { int ret; - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); ret = srd_decoder_load_all(); fail_unless(ret == SRD_OK, "srd_decoder_load_all() failed: %d.", ret); srd_exit(); @@ -61,7 +60,7 @@ START_TEST(test_load) { int ret; - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); ret = srd_decoder_load("uart"); fail_unless(ret == SRD_OK, "srd_decoder_load(uart) failed: %d.", ret); ret = srd_decoder_load("spi"); @@ -78,7 +77,7 @@ END_TEST */ START_TEST(test_load_bogus) { - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); /* http://sigrok.org/bugzilla/show_bug.cgi?id=176 */ fail_unless(srd_decoder_load(NULL) != SRD_OK); fail_unless(srd_decoder_load("") != SRD_OK); @@ -101,7 +100,7 @@ END_TEST */ START_TEST(test_load_valid_and_bogus) { - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); fail_unless(srd_decoder_load("") != SRD_OK); fail_unless(srd_decoder_load("uart") == SRD_OK); fail_unless(srd_decoder_load("") != SRD_OK); @@ -122,7 +121,7 @@ START_TEST(test_load_multiple) { int ret; - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); ret = srd_decoder_load("uart"); fail_unless(ret == SRD_OK, "Loading uart PD 1x failed: %d", ret); ret = srd_decoder_load("uart"); @@ -149,13 +148,121 @@ 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. */ START_TEST(test_decoder_list) { - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); srd_decoder_load_all(); fail_unless(srd_decoder_list() != NULL); srd_exit(); @@ -169,7 +276,7 @@ END_TEST */ START_TEST(test_decoder_list_no_load) { - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); fail_unless(srd_decoder_list() == NULL); srd_exit(); } @@ -205,7 +312,7 @@ END_TEST */ START_TEST(test_decoder_list_correct_numbers) { - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 0); srd_decoder_load("spi"); fail_unless(g_slist_length((GSList *)srd_decoder_list()) == 1); @@ -225,7 +332,7 @@ END_TEST */ START_TEST(test_get_by_id) { - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); srd_decoder_load("uart"); fail_unless(srd_decoder_get_by_id("uart") != NULL); fail_unless(srd_decoder_get_by_id("can") == NULL); @@ -242,7 +349,7 @@ END_TEST */ START_TEST(test_get_by_id_multiple) { - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); srd_decoder_load("uart"); fail_unless(srd_decoder_get_by_id("uart") != NULL); fail_unless(srd_decoder_get_by_id("uart") != NULL); @@ -258,7 +365,7 @@ END_TEST */ START_TEST(test_get_by_id_bogus) { - srd_init(DECODERS_DIR); + srd_init(DECODERS_TESTDIR); fail_unless(srd_decoder_get_by_id(NULL) == NULL); fail_unless(srd_decoder_get_by_id("") == NULL); fail_unless(srd_decoder_get_by_id(" ") == NULL); @@ -281,11 +388,14 @@ END_TEST START_TEST(test_doc_get) { struct srd_decoder *dec; + char *doc; - srd_init(DECODERS_DIR); + 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) { - srd_init(DECODERS_DIR); + 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);