diff --git a/tests/unittests/tests-saul_reg/Makefile b/tests/unittests/tests-saul_reg/Makefile new file mode 100644 index 000000000..48422e909 --- /dev/null +++ b/tests/unittests/tests-saul_reg/Makefile @@ -0,0 +1 @@ +include $(RIOTBASE)/Makefile.base diff --git a/tests/unittests/tests-saul_reg/Makefile.include b/tests/unittests/tests-saul_reg/Makefile.include new file mode 100644 index 000000000..2c8097484 --- /dev/null +++ b/tests/unittests/tests-saul_reg/Makefile.include @@ -0,0 +1 @@ +USEMODULE += saul_reg diff --git a/tests/unittests/tests-saul_reg/tests-saul_reg.c b/tests/unittests/tests-saul_reg/tests-saul_reg.c new file mode 100644 index 000000000..b7633b290 --- /dev/null +++ b/tests/unittests/tests-saul_reg/tests-saul_reg.c @@ -0,0 +1,195 @@ +/* + * Copyright (C) 2016 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @addtogroup unittests + * @{ + * + * @file + * @brief Implementations of unit tests for the SAUL registry + * + * @author Hauke Petersen + * @} + */ + +#include +#include + +#include "embUnit/embUnit.h" + +#include "saul_reg.h" +#include "tests-saul_reg.h" + +static const saul_driver_t s0_dri = { NULL, NULL, SAUL_ACT_SERVO }; +static const saul_driver_t s1_dri = { NULL, NULL, SAUL_SENSE_TEMP }; +static const saul_driver_t s2_dri = { NULL, NULL, SAUL_SENSE_LIGHT }; +static const saul_driver_t s3_dri = { NULL, NULL, SAUL_ACT_LED_RGB }; + +static saul_reg_t s0 = { NULL, NULL, "S0", &s0_dri }; +static saul_reg_t s1 = { NULL, NULL, "S1", &s1_dri }; +static saul_reg_t s2 = { NULL, NULL, "S2", &s2_dri }; +static saul_reg_t s3 = { NULL, NULL, "S3", &s3_dri }; + + +static int count(void) +{ + int i = 0; + saul_reg_t *cur = saul_reg; + + while (cur) { + ++i; + cur = cur->next; + } + + return i; +} + +static saul_reg_t *last(void) +{ + saul_reg_t *cur = saul_reg; + + if (cur == NULL) { + return NULL; + } + + while (cur->next != NULL) { + cur = cur->next; + } + return cur; +} + +static void test_reg_initial_size(void) +{ + TEST_ASSERT_NULL(saul_reg); + TEST_ASSERT_EQUAL_INT(count(), 0); +} + +static void test_reg_add(void) +{ + int res; + + res = saul_reg_add(&s0); + TEST_ASSERT_EQUAL_INT(0, res); + TEST_ASSERT_EQUAL_INT(count(), 1); + TEST_ASSERT_EQUAL_STRING("S0", saul_reg->name); + TEST_ASSERT_EQUAL_STRING("S0", last()->name); + + res = saul_reg_add(&s1); + TEST_ASSERT_EQUAL_INT(0, res); + TEST_ASSERT_EQUAL_INT(count(), 2); + TEST_ASSERT_EQUAL_STRING("S0", saul_reg->name); + TEST_ASSERT_EQUAL_STRING("S1", last()->name); + + res = saul_reg_add(&s2); + TEST_ASSERT_EQUAL_INT(0, res); + TEST_ASSERT_EQUAL_INT(count(), 3); + TEST_ASSERT_EQUAL_STRING("S0", saul_reg->name); + TEST_ASSERT_EQUAL_STRING("S2", last()->name); + + res = saul_reg_add(&s3); + TEST_ASSERT_EQUAL_INT(0, res); + TEST_ASSERT_EQUAL_INT(count(), 4); + TEST_ASSERT_EQUAL_STRING("S0", saul_reg->name); + TEST_ASSERT_EQUAL_STRING("S3", last()->name); + + res = saul_reg_add(NULL); + TEST_ASSERT_EQUAL_INT(-ENODEV, res); + TEST_ASSERT_EQUAL_INT(count(), 4); +} + +static void test_reg_find_nth(void) +{ + saul_reg_t *dev = saul_reg_find_nth(0); + TEST_ASSERT_NOT_NULL(dev); + TEST_ASSERT_EQUAL_STRING("S0", dev->name); + + dev = saul_reg_find_nth(2); + TEST_ASSERT_NOT_NULL(dev); + TEST_ASSERT_EQUAL_STRING("S2", dev->name); + + dev = saul_reg_find_nth(17); + TEST_ASSERT_NULL(dev); +} + +static void test_reg_find_type(void) +{ + saul_reg_t *dev = saul_reg_find_type(SAUL_SENSE_TEMP); + TEST_ASSERT_NOT_NULL(dev); + TEST_ASSERT_EQUAL_STRING("S1", dev->name); + + dev = saul_reg_find_type(SAUL_ACT_LED_RGB); + TEST_ASSERT_NOT_NULL(dev); + TEST_ASSERT_EQUAL_STRING("S3", dev->name); + + dev = saul_reg_find_type(SAUL_ACT_MOTOR); + TEST_ASSERT_NULL(dev); +} + +static void test_reg_find_name(void) +{ + saul_reg_t *dev = saul_reg_find_name("S1"); + TEST_ASSERT_NOT_NULL(dev); + TEST_ASSERT_EQUAL_INT(SAUL_SENSE_TEMP, dev->driver->type); + + dev = saul_reg_find_name("S0"); + TEST_ASSERT_NOT_NULL(dev); + TEST_ASSERT_EQUAL_INT(SAUL_ACT_SERVO, dev->driver->type); + + dev = saul_reg_find_name("TUUT"); + TEST_ASSERT_NULL(dev); +} + +static void test_reg_rm(void) +{ + int res; + + TEST_ASSERT_EQUAL_INT(4, count()); + TEST_ASSERT_EQUAL_STRING("S0", saul_reg->name); + TEST_ASSERT_EQUAL_STRING("S3", last()->name); + + res = saul_reg_rm(&s3); + TEST_ASSERT_EQUAL_INT(0, res); + TEST_ASSERT_EQUAL_INT(3, count()); + TEST_ASSERT_EQUAL_STRING("S0", saul_reg->name); + TEST_ASSERT_EQUAL_STRING("S2", last()->name); + + res = saul_reg_rm(&s1); + TEST_ASSERT_EQUAL_INT(0, res); + TEST_ASSERT_EQUAL_INT(2, count()); + TEST_ASSERT_EQUAL_STRING("S0", saul_reg->name); + TEST_ASSERT_EQUAL_STRING("S2", last()->name); + + res = saul_reg_rm(&s1); + TEST_ASSERT_EQUAL_INT(-ENODEV, res); + + res = saul_reg_rm(NULL); + TEST_ASSERT_EQUAL_INT(-ENODEV, res); + + TEST_ASSERT_EQUAL_INT(2, count()); +} + +Test *tests_saul_reg_tests(void) +{ + EMB_UNIT_TESTFIXTURES(fixtures) { + new_TestFixture(test_reg_initial_size), + new_TestFixture(test_reg_add), + new_TestFixture(test_reg_find_nth), + new_TestFixture(test_reg_find_type), + new_TestFixture(test_reg_find_name), + new_TestFixture(test_reg_rm) + }; + + EMB_UNIT_TESTCALLER(pkt_tests, NULL, NULL, fixtures); + + return (Test *)&pkt_tests; +} + +void tests_saul_reg(void) +{ + TESTS_RUN(tests_saul_reg_tests()); +} diff --git a/tests/unittests/tests-saul_reg/tests-saul_reg.h b/tests/unittests/tests-saul_reg/tests-saul_reg.h new file mode 100644 index 000000000..464bd4372 --- /dev/null +++ b/tests/unittests/tests-saul_reg/tests-saul_reg.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2016 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @addtogroup unittests + * @{ + * + * @file + * @brief Unit tests for the ``saul_reg`` module + * + * @author Hauke Petersen + */ + +#ifndef TESTS_SAUL_REG_H_ +#define TESTS_SAUL_REG_H_ + +#include "embUnit.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief The entry point of this test suite + */ +void tests_saul_reg(void); + +#ifdef __cplusplus +} +#endif + +#endif /* TESTS_SAUL_REG_H_ */ +/** @} */