]> sigrok.org Git - libsigrokdecode.git/blobdiff - tests/decoder.c
license: remove FSF postal address from boiler plate license text
[libsigrokdecode.git] / tests / decoder.c
index 726e17c5a58e63a40ccc87d0dd04986d8a62bd4a..2298d9334698af70e0cd4406cb16f825c1ce06f7 100644 (file)
  * 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 <http://www.gnu.org/licenses/>.
  */
 
-#include "../libsigrokdecode.h" /* First, to avoid compiler warning. */
+#include <config.h>
+#include <libsigrokdecode.h> /* First, to avoid compiler warning. */
 #include <stdlib.h>
 #include <check.h>
 #include "lib.h"
@@ -31,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();
@@ -60,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");
@@ -77,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);
@@ -100,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);
@@ -121,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");
@@ -148,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();
@@ -168,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();
 }
@@ -204,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);
@@ -224,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);
@@ -241,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);
@@ -257,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,7 +389,7 @@ START_TEST(test_doc_get)
 {
        struct srd_decoder *dec;
 
-       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);
@@ -296,7 +404,7 @@ END_TEST
  */
 START_TEST(test_doc_get_null)
 {
-       srd_init(DECODERS_DIR);
+       srd_init(DECODERS_TESTDIR);
        fail_unless(srd_decoder_doc_get(NULL) == NULL);
        srd_exit();
 }
@@ -321,6 +429,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);