test: send a single motion event for relative tests only
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 2 Jul 2015 22:26:04 +0000 (08:26 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 2 Jul 2015 23:44:04 +0000 (09:44 +1000)
Since 69449ca854, the minimum deceleration is 0.3 and we don't get a 0 motion
event anymore. We can drop the helper function now too.

What we do in that test instead is pump one relative motion event through
before we start comparing the events, this way our second, third, .. events
will have some acceleration applied and the tests compare more accurate
values.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
test/pointer.c

index 688b6b0..49cc85a 100644 (file)
 #include "libinput-util.h"
 #include "litest.h"
 
-static struct libinput_event_pointer *
-get_accelerated_motion_event(struct libinput *li)
-{
-       struct libinput_event *event;
-       struct libinput_event_pointer *ptrev;
-
-       while (1) {
-               event = libinput_get_event(li);
-               ptrev = litest_is_motion_event(event);
-
-               if (fabs(libinput_event_pointer_get_dx(ptrev)) < DBL_MIN &&
-                   fabs(libinput_event_pointer_get_dy(ptrev)) < DBL_MIN) {
-                       libinput_event_destroy(event);
-                       continue;
-               }
-
-               return ptrev;
-       }
-
-       litest_abort_msg("No accelerated pointer motion event found");
-       return NULL;
-}
-
 static void
 test_relative_event(struct litest_device *dev, int dx, int dy)
 {
        struct libinput *li = dev->libinput;
        struct libinput_event_pointer *ptrev;
+       struct libinput_event *event;
        double ev_dx, ev_dy;
        double expected_dir;
        double expected_length;
        double actual_dir;
        double actual_length;
 
-       /* Send two deltas, as the first one may be eaten up by an
-        * acceleration filter. */
-       litest_event(dev, EV_REL, REL_X, dx);
-       litest_event(dev, EV_REL, REL_Y, dy);
-       litest_event(dev, EV_SYN, SYN_REPORT, 0);
        litest_event(dev, EV_REL, REL_X, dx);
        litest_event(dev, EV_REL, REL_Y, dy);
        litest_event(dev, EV_SYN, SYN_REPORT, 0);
 
        libinput_dispatch(li);
 
-       ptrev = get_accelerated_motion_event(li);
+       event = libinput_get_event(li);
+       ptrev = litest_is_motion_event(event);
 
        expected_length = sqrt(4 * dx*dx + 4 * dy*dy);
        expected_dir = atan2(dx, dy);
@@ -97,7 +71,7 @@ test_relative_event(struct litest_device *dev, int dx, int dy)
         * indifference). */
        litest_assert(fabs(expected_dir - actual_dir) < M_PI_2);
 
-       libinput_event_destroy(libinput_event_pointer_get_base_event(ptrev));
+       libinput_event_destroy(event);
 
        litest_drain_events(dev->libinput);
 }
@@ -120,6 +94,13 @@ START_TEST(pointer_motion_relative)
 {
        struct litest_device *dev = litest_current_device();
 
+       /* send a single event, the first movement
+          is always decelerated by 0.3 */
+       litest_event(dev, EV_REL, REL_X, 1);
+       litest_event(dev, EV_REL, REL_Y, 0);
+       litest_event(dev, EV_SYN, SYN_REPORT, 0);
+       libinput_dispatch(dev->libinput);
+
        litest_drain_events(dev->libinput);
 
        test_relative_event(dev, 1, 0);