test: add another helper to discard specific events
authorPeter Hutterer <peter.hutterer@who-t.net>
Tue, 12 Feb 2019 01:59:09 +0000 (11:59 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 13 Feb 2019 08:45:04 +0000 (18:45 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
test/litest.c
test/litest.h
test/test-tablet.c

index 7c988f494f51c6962b9ad8e05685e47261377503..046c7f10585c7af2a5ae65d3273ef5a02ded8d5a 100644 (file)
@@ -2601,6 +2601,48 @@ litest_drain_events(struct libinput *li)
        }
 }
 
+
+void
+litest_drain_events_of_type(struct libinput *li, ...)
+{
+       enum libinput_event_type type;
+       enum libinput_event_type types[32] = {LIBINPUT_EVENT_NONE};
+       size_t ntypes = 0;
+       va_list args;
+
+       va_start(args, li);
+       type = va_arg(args, int);
+       while ((int)type != -1) {
+               litest_assert(type > 0);
+               litest_assert(ntypes < ARRAY_LENGTH(types));
+               types[ntypes++] = type;
+               type = va_arg(args, int);
+       }
+       va_end(args);
+
+       libinput_dispatch(li);
+       type = libinput_next_event_type(li);
+       while (type !=  LIBINPUT_EVENT_NONE) {
+               struct libinput_event *event;
+               bool found = false;
+
+               type = libinput_next_event_type(li);
+
+               for (size_t i = 0; i < ntypes; i++) {
+                       if (type == types[i]) {
+                               found = true;
+                               break;
+                       }
+               }
+               if (!found)
+                       return;
+
+               event = libinput_get_event(li);
+               libinput_event_destroy(event);
+               libinput_dispatch(li);
+       }
+}
+
 static const char *
 litest_event_type_str(enum libinput_event_type type)
 {
index 677880124fc27caacaa99dfc99e804f076d08b11..50171a82b9989cc2c2d0f31d01682e465cf26921 100644 (file)
@@ -675,6 +675,9 @@ litest_wait_for_event_of_type(struct libinput *li, ...);
 void
 litest_drain_events(struct libinput *li);
 
+void
+litest_drain_events_of_type(struct libinput *li, ...);
+
 void
 litest_assert_event_type(struct libinput_event *event,
                         enum libinput_event_type want);
index ce2fe732e18312838a8cf92d24c455d2736cad35..35c47c581e494777e3da9fa28e3bed34215e0474 100644 (file)
@@ -2642,11 +2642,7 @@ START_TEST(tool_in_prox_before_start)
        li = litest_create_context();
        libinput_path_add_device(li, devnode);
 
-       litest_wait_for_event_of_type(li,
-                                     LIBINPUT_EVENT_DEVICE_ADDED,
-                                     -1);
-       event = libinput_get_event(li);
-       libinput_event_destroy(event);
+       litest_drain_events_of_type(li, LIBINPUT_EVENT_DEVICE_ADDED, -1);
 
        litest_assert_empty_queue(li);