X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=test%2Ftouchpad.c;h=18427c1aa1eeacf6690b48c8daed3a8a3f678ef8;hb=9ecce8e2f73e9115f680755745d9c0d8c4e50a00;hp=3bd5fb67f904f05514b8e2b060e0368dbe498525;hpb=489630f58b2ac099bf235efc5dfd9cd854c223ee;p=platform%2Fupstream%2Flibinput.git diff --git a/test/touchpad.c b/test/touchpad.c index 3bd5fb6..18427c1 100644 --- a/test/touchpad.c +++ b/test/touchpad.c @@ -1198,15 +1198,13 @@ START_TEST(touchpad_2fg_scroll) litest_drain_events(li); - /* Note this mixes in a tiny amount of movement in the wrong direction, - which should be ignored */ - test_2fg_scroll(dev, 1, 40, 0); + test_2fg_scroll(dev, 0.1, 40, 0); check_2fg_scroll(dev, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL, 10); - test_2fg_scroll(dev, 1, -40, 0); + test_2fg_scroll(dev, 0.1, -40, 0); check_2fg_scroll(dev, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL, -10); - test_2fg_scroll(dev, 40, 1, 0); + test_2fg_scroll(dev, 40, 0.1, 0); check_2fg_scroll(dev, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL, 10); - test_2fg_scroll(dev, -40, 1, 0); + test_2fg_scroll(dev, -40, 0.1, 0); check_2fg_scroll(dev, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL, -10); /* 2fg scroll smaller than the threshold should not generate events */ @@ -1243,6 +1241,131 @@ START_TEST(touchpad_tap_default) } END_TEST +START_TEST(touchpad_palm_detect_at_edge) +{ + struct litest_device *dev = litest_current_device(); + struct libinput *li = dev->libinput; + + litest_drain_events(li); + + litest_touch_down(dev, 0, 99, 50); + litest_touch_move_to(dev, 0, 99, 50, 99, 70, 5); + litest_touch_up(dev, 0); + + litest_assert_empty_queue(li); + + litest_touch_down(dev, 0, 5, 50); + litest_touch_move_to(dev, 0, 5, 50, 5, 70, 5); + litest_touch_up(dev, 0); +} +END_TEST + +START_TEST(touchpad_palm_detect_at_bottom_corners) +{ + struct litest_device *dev = litest_current_device(); + struct libinput *li = dev->libinput; + + /* Run for non-clickpads only: make sure the bottom corners trigger + palm detection too */ + litest_drain_events(li); + + litest_touch_down(dev, 0, 99, 95); + litest_touch_move_to(dev, 0, 99, 95, 99, 99, 10); + litest_touch_up(dev, 0); + + litest_assert_empty_queue(li); + + litest_touch_down(dev, 0, 5, 95); + litest_touch_move_to(dev, 0, 5, 95, 5, 99, 5); + litest_touch_up(dev, 0); +} +END_TEST + +START_TEST(touchpad_palm_detect_at_top_corners) +{ + struct litest_device *dev = litest_current_device(); + struct libinput *li = dev->libinput; + + /* Run for non-clickpads only: make sure the bottom corners trigger + palm detection too */ + litest_drain_events(li); + + litest_touch_down(dev, 0, 99, 5); + litest_touch_move_to(dev, 0, 99, 5, 99, 9, 10); + litest_touch_up(dev, 0); + + litest_assert_empty_queue(li); + + litest_touch_down(dev, 0, 5, 5); + litest_touch_move_to(dev, 0, 5, 5, 5, 9, 5); + litest_touch_up(dev, 0); +} +END_TEST + +START_TEST(touchpad_palm_detect_palm_becomes_pointer) +{ + struct litest_device *dev = litest_current_device(); + struct libinput *li = dev->libinput; + struct libinput_event *ev; + enum libinput_event_type type; + + litest_drain_events(li); + + litest_touch_down(dev, 0, 99, 50); + litest_touch_move_to(dev, 0, 99, 70, 0, 70, 5); + litest_touch_up(dev, 0); + + libinput_dispatch(li); + + ev = libinput_get_event(li); + ck_assert_notnull(ev); + do { + type = libinput_event_get_type(ev); + ck_assert_int_eq(type, LIBINPUT_EVENT_POINTER_MOTION); + + libinput_event_destroy(ev); + ev = libinput_get_event(li); + } while (ev); + + litest_assert_empty_queue(li); +} +END_TEST + +START_TEST(touchpad_palm_detect_no_palm_moving_into_edges) +{ + struct litest_device *dev = litest_current_device(); + struct libinput *li = dev->libinput; + struct libinput_event *ev; + enum libinput_event_type type; + + /* moving non-palm into the edge does not label it as palm */ + litest_drain_events(li); + + litest_touch_down(dev, 0, 50, 50); + litest_touch_move_to(dev, 0, 50, 50, 99, 50, 5); + + litest_drain_events(li); + + litest_touch_move_to(dev, 0, 99, 50, 99, 90, 5); + libinput_dispatch(li); + + type = libinput_next_event_type(li); + do { + + ck_assert_int_eq(type, LIBINPUT_EVENT_POINTER_MOTION); + ev = libinput_get_event(li); + libinput_event_destroy(ev); + + type = libinput_next_event_type(li); + libinput_dispatch(li); + } while (type != LIBINPUT_EVENT_NONE); + + litest_touch_up(dev, 0); + libinput_dispatch(li); + litest_assert_empty_queue(li); +} +END_TEST + int main(int argc, char **argv) { litest_add("touchpad:motion", touchpad_1fg_motion, LITEST_TOUCHPAD, LITEST_ANY); @@ -1292,5 +1415,11 @@ int main(int argc, char **argv) { litest_add("touchpad:scroll", touchpad_2fg_scroll, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH); + litest_add("touchpad:palm", touchpad_palm_detect_at_edge, LITEST_TOUCHPAD, LITEST_ANY); + litest_add("touchpad:palm", touchpad_palm_detect_at_bottom_corners, LITEST_TOUCHPAD, LITEST_CLICKPAD); + litest_add("touchpad:palm", touchpad_palm_detect_at_top_corners, LITEST_TOUCHPAD, LITEST_TOPBUTTONPAD); + litest_add("touchpad:palm", touchpad_palm_detect_palm_becomes_pointer, LITEST_TOUCHPAD, LITEST_ANY); + litest_add("touchpad:palm", touchpad_palm_detect_no_palm_moving_into_edges, LITEST_TOUCHPAD, LITEST_ANY); + return litest_run(argc, argv); }