[PATCH libevdev] Actually filter by log priority
Peter Hutterer
peter.hutterer at who-t.net
Tue Feb 11 21:07:09 PST 2014
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 <peter.hutterer at who-t.net>
---
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);
--
1.8.4.2
More information about the Input-tools
mailing list