[PATCH libinput 22/23] test: Add bad-distance-events test
Peter Hutterer
peter.hutterer at who-t.net
Sun Jun 15 22:48:35 PDT 2014
On Thu, Jun 12, 2014 at 11:28:43PM -0400, Stephen Chandler Paul wrote:
> There's a special distance on wacom tablets where the stylus is close enough to
> be (sort of) recongnized by the tablet, but not close enough to send any useful
> data. When the pen's in this distance, it will send a distance event with the
> value absinfo->maximum or absinfo->minimum, but no other events. Since that
> gives the caller the false impression that the tablet is actually in useful
> proximity of the tablet, we want to make sure we filter out any events like
> this.
>
> Signed-off-by: Stephen Chandler Paul <thatslyude at gmail.com>
> ---
> test/tablet.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 42 insertions(+)
>
> diff --git a/test/tablet.c b/test/tablet.c
> index 80a70c8..e503124 100644
> --- a/test/tablet.c
> +++ b/test/tablet.c
> @@ -281,12 +281,54 @@ START_TEST(motion)
> }
> END_TEST
>
> +START_TEST(bad_distance_events)
> +{
> + struct litest_device *dev = litest_current_device();
> + struct libinput *li = dev->libinput;
> + struct libinput_event_tablet *tablet_event;
> + struct libinput_event *event;
> + bool bad_distance_event_received = false,
> + axis_has_changed;
> + enum libinput_event_type type;
> + const struct input_absinfo *absinfo;
> +
> + litest_drain_events(dev->libinput);
> +
> + litest_tablet_proximity_out(dev);
you'll need a drain_events here too
> +
> + absinfo = libevdev_get_abs_info(dev->evdev, ABS_DISTANCE);
> + ck_assert(absinfo != NULL);
> +
> + litest_event(dev, EV_ABS, ABS_DISTANCE, absinfo->maximum);
> + litest_event(dev, EV_SYN, SYN_REPORT, 0);
> + litest_event(dev, EV_ABS, ABS_DISTANCE, absinfo->minimum);
> + litest_event(dev, EV_SYN, SYN_REPORT, 0);
> +
> + /* We shouldn't be able to see any of the bad distance events that got
> + * sent
> + */
we shouldn't see any events here, a libinput_assert_empty_queue() here
should be enough. though I understand the current code may not do this, so
maybe better to hold this patch back until we have the rest sorted. though I
understand the current code may not do this, so maybe better to hold this
patch back until we have the rest sorted. though I understand the current
code may not do this, so maybe better to hold this patch back until we have
the rest sorted. though I understand the current code may not do this, so
maybe better to hold this patch back until we have the rest sorted.
> + while ((event = libinput_get_event(li))) {
> + tablet_event = libinput_event_get_tablet_event(event);
> + type = libinput_event_get_type(event);
> + axis_has_changed = libinput_event_tablet_axis_has_changed(
> + tablet_event, LIBINPUT_TABLET_AXIS_DISTANCE);
> +
> + if (type == LIBINPUT_EVENT_TABLET_AXIS && axis_has_changed)
> + bad_distance_event_received = true;
> +
> + libinput_event_destroy(event);
> + }
> + ck_assert(!bad_distance_event_received);
> +}
> +END_TEST
> +
> int
> main(int argc, char **argv)
> {
> litest_add("tablet:proximity-out-clear-buttons", proximity_out_clear_buttons, LITEST_TABLET, LITEST_ANY);
> litest_add("tablet:proximity-in-out", proximity_in_out, LITEST_TABLET, LITEST_ANY);
> litest_add("tablet:motion", motion, LITEST_TABLET, LITEST_ANY);
> + litest_add("tablet:bad-distance-events", bad_distance_events, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY);
this too can be in the tablet:proximity group
Cheers,
Peter
>
> return litest_run(argc, argv);
> }
> --
> 1.8.5.5
>
More information about the wayland-devel
mailing list