From 50b82c19b5c6a30e6c6a12630065c6aa0693de22 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 12 Feb 2014 14:54:13 +1000 Subject: [PATCH] Actually filter by log priority If a message is higher than the current priority, filter it. And add a few tests that the priority is handled the way it should. Signed-off-by: Peter Hutterer Reviewed-by: David Herrmann --- libevdev/libevdev.c | 2 +- test/test-libevdev-init.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index cf532e3..142d6ad 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -122,7 +122,7 @@ log_msg(enum libevdev_log_priority priority, { va_list args; - if (!log_data.handler) + if (!log_data.handler || priority > log_data.priority) return; va_start(args, format); diff --git a/test/test-libevdev-init.c b/test/test-libevdev-init.c index 6be3d74..c2c90a5 100644 --- a/test/test-libevdev-init.c +++ b/test/test-libevdev-init.c @@ -120,6 +120,8 @@ START_TEST(test_log_init) { struct libevdev *dev = NULL; + libevdev_set_log_priority(LIBEVDEV_LOG_DEBUG); + libevdev_set_log_function(logfunc, NULL); libevdev_set_log_function(NULL, NULL); @@ -144,6 +146,77 @@ START_TEST(test_log_init) libevdev_free(dev); libevdev_set_log_function(test_logfunc_abort_on_error, NULL); + + log_fn_called = 0; +} +END_TEST + +START_TEST(test_log_default_priority) +{ + ck_assert_int_eq(libevdev_get_log_priority(), LIBEVDEV_LOG_INFO); +} +END_TEST + +START_TEST(test_log_set_get_priority) +{ + enum libevdev_log_priority pri; + + pri = LIBEVDEV_LOG_DEBUG; + libevdev_set_log_priority(pri); + ck_assert_int_eq(libevdev_get_log_priority(), pri); + + pri = LIBEVDEV_LOG_INFO; + libevdev_set_log_priority(pri); + ck_assert_int_eq(libevdev_get_log_priority(), pri); + + pri = LIBEVDEV_LOG_ERROR; + libevdev_set_log_priority(pri); + ck_assert_int_eq(libevdev_get_log_priority(), pri); + + /* debug and above is clamped */ + pri = LIBEVDEV_LOG_DEBUG + 1; + libevdev_set_log_priority(pri); + ck_assert_int_eq(libevdev_get_log_priority(), LIBEVDEV_LOG_DEBUG); + + /* error and below is not clamped, we need this for another test */ + pri = LIBEVDEV_LOG_ERROR - 1; + libevdev_set_log_priority(pri); + ck_assert_int_eq(libevdev_get_log_priority(), pri); +} +END_TEST + +START_TEST(test_log_priority) +{ + struct libevdev *dev = NULL; + + libevdev_set_log_function(logfunc, logdata); + + dev = libevdev_new(); + ck_assert(dev != NULL); + + libevdev_set_log_priority(LIBEVDEV_LOG_DEBUG); + libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, NULL); + ck_assert_int_eq(log_fn_called, 1); + + libevdev_set_log_priority(LIBEVDEV_LOG_INFO); + libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, NULL); + ck_assert_int_eq(log_fn_called, 2); + + libevdev_set_log_priority(LIBEVDEV_LOG_ERROR); + libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, NULL); + ck_assert_int_eq(log_fn_called, 3); + + /* we don't have any log msgs > ERROR at the moment, so test it by + setting an invalid priority. */ + libevdev_set_log_priority(LIBEVDEV_LOG_ERROR - 1); + libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, NULL); + ck_assert_int_eq(log_fn_called, 3); + + libevdev_free(dev); + + libevdev_set_log_function(test_logfunc_abort_on_error, NULL); + + log_fn_called = 0; } END_TEST @@ -390,6 +463,9 @@ libevdev_init_test(void) tc = tcase_create("log init"); tcase_add_test(tc, test_log_init); + tcase_add_test(tc, test_log_priority); + tcase_add_test(tc, test_log_set_get_priority); + tcase_add_test(tc, test_log_default_priority); tcase_add_test(tc, test_log_data); suite_add_tcase(s, tc); -- 2.7.4