[PATCH libevdev 4/5] Add name-resolver unit tests
David Herrmann
dh.herrmann at gmail.com
Fri Oct 4 11:39:26 PDT 2013
Hi
On Fri, Oct 4, 2013 at 8:37 PM, David Herrmann <dh.herrmann at gmail.com> wrote:
> A bunch of tests for the new name resolver.
>
> Signed-off-by: David Herrmann <dh.herrmann at gmail.com>
> ---
> test/Makefile.am | 1 +
> test/test-event-codes.c | 314 ++++++++++++++++++++++++++++++++++++++++++++++++
> test/test-main.c | 2 +
> 3 files changed, 317 insertions(+)
> create mode 100644 test/test-event-codes.c
>
> diff --git a/test/Makefile.am b/test/Makefile.am
> index 258af9e..986fcc9 100644
> --- a/test/Makefile.am
> +++ b/test/Makefile.am
> @@ -23,6 +23,7 @@ AM_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir)/libevdev $(CHECK_CFLAGS) $(GCOV_
> test_libevdev_SOURCES = \
> test-main.c \
> test-event-names.c \
> + test-event-codes.c \
> test-libevdev-init.c \
> test-libevdev-has-event.c \
> test-int-queue.c \
> diff --git a/test/test-event-codes.c b/test/test-event-codes.c
> new file mode 100644
> index 0000000..2e20165
> --- /dev/null
> +++ b/test/test-event-codes.c
> @@ -0,0 +1,314 @@
> +/*
> + * Copyright © 2013 David Herrmann <dh.herrmann at gmail.com>
> + *
> + * Permission to use, copy, modify, distribute, and sell this software and its
> + * documentation for any purpose is hereby granted without fee, provided that
> + * the above copyright notice appear in all copies and that both that copyright
> + * notice and this permission notice appear in supporting documentation, and
> + * that the name of the copyright holders not be used in advertising or
> + * publicity pertaining to distribution of the software without specific,
> + * written prior permission. The copyright holders make no representations
> + * about the suitability of this software for any purpose. It is provided "as
> + * is" without express or implied warranty.
> + *
> + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
> + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
> + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
> + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
> + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
> + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
> + * OF THIS SOFTWARE.
> + */
> +
> +#include <config.h>
> +#include <libevdev/libevdev-int.h>
> +#include "test-common.h"
> +
> +struct entry {
> + int code;
> + const char *name;
> + size_t name_len;
> + const char *suffix;
> + size_t suffix_len;
> + int value;
> +};
> +
> +#define IENTRY(_code, _prefix, _suffix, _value) \
> + { \
> + .code = _code, \
> + .name = # _prefix # _suffix, \
> + .name_len = sizeof(# _prefix # _suffix) - 1, \
> + .suffix = # _suffix, \
> + .suffix_len = sizeof(# _suffix) - 1, \
> + .value = _value, \
> + }
> +
> +#define ENTRY(_code, _prefix, _suffix) IENTRY(_code, _prefix, _suffix, _prefix ## _suffix)
> +
> +static const struct entry types[] = {
> + ENTRY(-1, EV_, SYN),
> + ENTRY(-1, EV_, KEY),
> + ENTRY(-1, EV_, REL),
> + ENTRY(-1, EV_, ABS),
> + ENTRY(-1, EV_, MSC),
> + ENTRY(-1, EV_, SW),
> + ENTRY(-1, EV_, LED),
> + ENTRY(-1, EV_, SND),
> + ENTRY(-1, EV_, REP),
> + ENTRY(-1, EV_, FF),
> + ENTRY(-1, EV_, PWR),
> + ENTRY(-1, EV_, FF_STATUS),
> + ENTRY(-1, EV_, MAX),
> +};
> +
> +START_TEST(test_type_codes)
> +{
> + int i, v, flags;
> +
> + flags = LIBEVDEV_RESOLVER_FLAG_DEFAULT;
> +
> + ck_assert(libevdev_event_type_from_name("EV_FF", -1, flags) == EV_FF);
> +
> + for (i = 0; i < ARRAY_LENGTH(types); ++i) {
> + v = libevdev_event_type_from_name(types[i].name, -1, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].name,
> + types[i].name_len, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].suffix, -1, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].suffix,
> + types[i].suffix_len, flags);
> + ck_assert(v == types[i].value);
> + }
> +}
> +END_TEST
> +
> +START_TEST(test_type_codes_case)
> +{
> + int i, v, flags;
> + static const struct entry entries[] = {
> + IENTRY(-1, ev_, max, EV_MAX),
> + IENTRY(-1, ev_, SYN, EV_SYN),
> + IENTRY(-1, ev_, REL, EV_REL),
> + IENTRY(-1, EV_, FF_STATUs, EV_FF_STATUS),
> + IENTRY(-1, EV_, pwr, EV_PWR),
> + };
> +
> + flags = LIBEVDEV_RESOLVER_FLAG_DEFAULT;
> +
> + for (i = 0; i < ARRAY_LENGTH(entries); ++i) {
> + v = libevdev_event_type_from_name(entries[i].name, -1, flags);
> + ck_assert(v == entries[i].value);
> + }
> +
> + flags = LIBEVDEV_RESOLVER_FLAG_CASE_SENSITIVE;
> +
> + for (i = 0; i < ARRAY_LENGTH(entries); ++i) {
> + v = libevdev_event_type_from_name(entries[i].name, -1, flags);
> + ck_assert(v == -1);
> + }
> +
> + ck_assert(libevdev_event_type_from_name("EV_FF", -1, flags) == EV_FF);
> + ck_assert(libevdev_event_type_from_name("EV_Ff", -1, flags) == -1);
> +
> + for (i = 0; i < ARRAY_LENGTH(types); ++i) {
> + v = libevdev_event_type_from_name(types[i].name, -1, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].name,
> + types[i].name_len, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].suffix, -1, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].suffix,
> + types[i].suffix_len, flags);
> + ck_assert(v == types[i].value);
> + }
> +}
> +END_TEST
> +
> +START_TEST(test_type_codes_prefix)
> +{
> + int i, v, flags;
> + static const struct entry entries[] = {
> + IENTRY(-1, ev_, max, EV_MAX),
> + IENTRY(-1, ev_, SYN, EV_SYN),
> + IENTRY(-1, ev_, REL, EV_REL),
> + IENTRY(-1, EV_, FF_STATUs, EV_FF_STATUS),
> + IENTRY(-1, EV_, pwr, EV_PWR),
> + };
> +
> + flags = LIBEVDEV_RESOLVER_FLAG_DEFAULT;
> +
> + ck_assert(libevdev_event_type_from_name("EV_EV_FF", -1, flags) == -1);
> + ck_assert(libevdev_event_type_from_name("EV_EV_ff", -1, flags) == -1);
> + ck_assert(libevdev_event_type_from_name("EV_FF", -1, flags) == EV_FF);
> + ck_assert(libevdev_event_type_from_name("ev_ff", -1, flags) == EV_FF);
> +
> + for (i = 0; i < ARRAY_LENGTH(entries); ++i) {
> + v = libevdev_event_type_from_name(entries[i].suffix, -1, flags);
> + ck_assert(v == entries[i].value);
> + }
> +
> + for (i = 0; i < ARRAY_LENGTH(types); ++i) {
> + v = libevdev_event_type_from_name(types[i].name, -1, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].name,
> + types[i].name_len, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].suffix, -1, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].suffix,
> + types[i].suffix_len, flags);
> + ck_assert(v == types[i].value);
> + }
> +
> + flags = LIBEVDEV_RESOLVER_FLAG_REQUIRE_PREFIX;
> +
> + ck_assert(libevdev_event_type_from_name("EV_EV_FF", -1, flags) == -1);
> + ck_assert(libevdev_event_type_from_name("EV_EV_ff", -1, flags) == -1);
> + ck_assert(libevdev_event_type_from_name("EV_FF", -1, flags) == EV_FF);
> + ck_assert(libevdev_event_type_from_name("ev_ff", -1, flags) == EV_FF);
> + ck_assert(libevdev_event_type_from_name("FF", -1, flags) == -1);
> + ck_assert(libevdev_event_type_from_name("ff", -1, flags) == -1);
> +
> + for (i = 0; i < ARRAY_LENGTH(entries); ++i) {
> + v = libevdev_event_type_from_name(entries[i].suffix, -1, flags);
> + ck_assert(v == -1);
> + }
> +
> + for (i = 0; i < ARRAY_LENGTH(types); ++i) {
> + v = libevdev_event_type_from_name(types[i].name, -1, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].name,
> + types[i].name_len, flags);
> + ck_assert(v == types[i].value);
> +
> + v = libevdev_event_type_from_name(types[i].suffix, -1, flags);
> + ck_assert(v == -1);
> +
> + v = libevdev_event_type_from_name(types[i].suffix,
> + types[i].suffix_len, flags);
> + ck_assert(v == -1);
> + }
> +}
> +END_TEST
> +
> +START_TEST(test_type_invalid)
> +{
> + int i, v, flags;
> + static const struct entry entries[] = {
> + IENTRY(-1, EV_, ASDF, -1),
> + IENTRY(-1, EV_, CNT, -1),
> + IENTRY(-1, EV_, SYNS, -1),
> + IENTRY(-1, EV_, FF_STATU, -1),
> + IENTRY(-1, EV_, A, -1),
> + };
> +
> + flags = LIBEVDEV_RESOLVER_FLAG_DEFAULT;
> +
> + for (i = 0; i < ARRAY_LENGTH(entries); ++i) {
> + v = libevdev_event_type_from_name(entries[i].name, -1, flags);
> + ck_assert(v == entries[i].value);
> + }
> +
> + for (i = 0; i < ARRAY_LENGTH(entries); ++i) {
> + v = libevdev_event_type_from_name(entries[i].suffix, -1, flags);
> + ck_assert(v == entries[i].value);
> + }
> +}
> +END_TEST
> +
> +START_TEST(test_type_invalid_case)
> +{
> + int i, v, flags;
> + static const struct entry entries[] = {
> + IENTRY(-1, EV_, ASDF, -1),
> + IENTRY(-1, EV_, CNT, -1),
> + IENTRY(-1, EV_, SYNS, -1),
> + IENTRY(-1, EV_, FF_STATU, -1),
> + IENTRY(-1, EV_, A, -1),
> + IENTRY(-1, EV_, a, -1),
> + IENTRY(-1, EV_, asdf, -1),
> + IENTRY(-1, EV_, SYn, -1),
> + IENTRY(-1, EV_, syN, -1),
> + IENTRY(-1, EV_, ff_status, -1),
> + IENTRY(-1, EV_, cnt, -1),
> + IENTRY(-1, EV_, sw, -1),
> + };
> +
> + flags = LIBEVDEV_RESOLVER_FLAG_CASE_SENSITIVE;
> +
> + for (i = 0; i < ARRAY_LENGTH(entries); ++i) {
> + v = libevdev_event_type_from_name(entries[i].name, -1, flags);
> + ck_assert(v == entries[i].value);
> + }
> +
> + for (i = 0; i < ARRAY_LENGTH(entries); ++i) {
> + v = libevdev_event_type_from_name(entries[i].suffix, -1, flags);
> + ck_assert(v == entries[i].value);
> + }
> +}
> +END_TEST
> +
> +START_TEST(test_key_codes)
> +{
> + int i, v, flags, type;
> + static const struct entry entries[] = {
> + ENTRY(EV_KEY, KEY_, A),
> + ENTRY(EV_KEY, KEY_, ESC),
> + ENTRY(EV_KEY, KEY_, MAX),
> + ENTRY(EV_KEY, BTN_, TRIGGER_HAPPY40),
> + IENTRY(EV_KEY, BTN_, WHEEL, -1),
> + };
> +
> + flags = LIBEVDEV_RESOLVER_FLAG_DEFAULT;
> + type = -1;
> +
> + for (i = 0; i < ARRAY_LENGTH(entries); ++i) {
> + v = libevdev_event_code_from_name(entries[i].name, -1, type, flags);
> + ck_assert(v == entries[i].value);
> + }
> +
> + type = EV_KEY;
> +
> + for (i = 0; i < ARRAY_LENGTH(entries); ++i) {
> + v = libevdev_event_code_from_name(entries[i].suffix, -1, type, flags);
> + ck_assert(v == entries[i].value);
> +
> + v = libevdev_event_code_from_name(entries[i].name, -1, type, flags);
> + ck_assert(v == entries[i].value);
> + }
> +}
> +END_TEST
> +
> +Suite *
> +event_code_suite(void)
> +{
> + Suite *s = suite_create("Event codes");
> +
> + TCase *tc = tcase_create("type tests");
> + tcase_add_test(tc, test_type_codes);
> + tcase_add_test(tc, test_type_codes_case);
> + tcase_add_test(tc, test_type_codes_prefix);
> + tcase_add_test(tc, test_type_invalid);
> + tcase_add_test(tc, test_type_invalid_case);
> + suite_add_tcase(s, tc);
> +
> + tc = tcase_create("key tests");
> + tcase_add_test(tc, test_key_codes);
> + suite_add_tcase(s, tc);
I forgot to mention that I didn't add proper tests for the
libevdev_event_code_from_name() function. I want to get an ACK for the
API first before I add tests that I have to rewrite later, anyway.
David
> +
> + return s;
> +}
> +
> diff --git a/test/test-main.c b/test/test-main.c
> index c6efaf6..73d79c9 100644
> --- a/test/test-main.c
> +++ b/test/test-main.c
> @@ -24,6 +24,7 @@
> #include <check.h>
>
> extern Suite *event_name_suite(void);
> +extern Suite *event_code_suite(void);
> extern Suite *libevdev_init_test(void);
> extern Suite *queue_suite(void);
> extern Suite *libevdev_has_event_test(void);
> @@ -39,6 +40,7 @@ int main(int argc, char **argv)
> srunner_add_suite(sr, libevdev_init_test());
> srunner_add_suite(sr, queue_suite());
> srunner_add_suite(sr, event_name_suite());
> + srunner_add_suite(sr, event_code_suite());
> srunner_add_suite(sr, uinput_suite());
> srunner_run_all(sr, CK_NORMAL);
>
> --
> 1.8.4
>
More information about the Input-tools
mailing list