[PATCH libinput 21/23] test: Add motion event test for tablets

Peter Hutterer peter.hutterer at who-t.net
Sun Jun 15 22:37:35 PDT 2014


On Thu, Jun 12, 2014 at 11:28:42PM -0400, Stephen Chandler Paul wrote:
> Based off the patch originally written by Carlos Garnacho
> 
> Signed-off-by: Stephen Chandler Paul <thatslyude at gmail.com>
> ---
>  test/tablet.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 64 insertions(+), 1 deletion(-)
> 
> diff --git a/test/tablet.c b/test/tablet.c
> index 9c5397f..80a70c8 100644
> --- a/test/tablet.c
> +++ b/test/tablet.c
> @@ -130,7 +130,8 @@ START_TEST(proximity_in_out)
>  				int has_changed;
>  				double value;
>  
> -				has_changed = libinput_event_tablet_axis_has_changed(
> +				has_changed =
> +				libinput_event_tablet_axis_has_changed(
>  				    tablet_event, a);
>  				value = libinput_event_tablet_get_axis_value(
>  				    tablet_event, a);

drop this hunk please.

> @@ -219,11 +220,73 @@ START_TEST(proximity_out_clear_buttons)
>  }
>  END_TEST
>  
> +START_TEST(motion)
> +{
> +	struct litest_device *dev = litest_current_device();
> +	struct libinput *li = dev->libinput;
> +	struct libinput_event_tablet *tablet_event;
> +	struct libinput_event *event;
> +	double x1, x2, y1, y2;
> +	bool have_motion = false;
> +	enum libinput_event_type type;
> +	struct axis_replacement axes[] = {
> +		{ ABS_DISTANCE, 10 },
> +		{ -1, -1 }
> +	};
> +
> +	litest_drain_events(dev->libinput);
> +
> +	litest_tablet_proximity_in(dev, 10, 10, axes);
> +	libinput_dispatch(li);
> +
> +	while ((event = libinput_get_event(li))) {
> +		tablet_event = libinput_event_get_tablet_event(event);
> +		type = libinput_event_get_type(event);
> +
> +		if (type == LIBINPUT_EVENT_TABLET_AXIS &&
> +		    libinput_event_tablet_axis_has_changed(tablet_event,
> +							   LIBINPUT_TABLET_AXIS_X) &&
> +		    libinput_event_tablet_axis_has_changed(tablet_event,
> +							   LIBINPUT_TABLET_AXIS_Y)) {
> +			x1 = libinput_event_tablet_get_axis_value(
> +			    tablet_event, LIBINPUT_TABLET_AXIS_X);
> +			y1 = libinput_event_tablet_get_axis_value(
> +			    tablet_event, LIBINPUT_TABLET_AXIS_Y);
> +
> +			have_motion = true;
> +		}
> +
> +		libinput_event_destroy(event);
> +	}
> +	ck_assert(have_motion);

wrap the below in a loop to run it a number of times, making sure that
x2/y2 keep increasing. Or event better, increase one, decrease the other to
avoid accidental bugs where we assign x to y.

Cheers,
   Peter

> +
> +	litest_tablet_motion(dev, 20, 20, axes);
> +	libinput_dispatch(li);
> +
> +	while ((event = libinput_get_event(li))) {
> +		tablet_event = libinput_event_get_tablet_event(event);
> +		type = libinput_event_get_type(event);
> +
> +		if (type == LIBINPUT_EVENT_TABLET_AXIS) {
> +			x2 = libinput_event_tablet_get_axis_value(
> +			    tablet_event, LIBINPUT_TABLET_AXIS_X);
> +			y2 = libinput_event_tablet_get_axis_value(
> +			    tablet_event, LIBINPUT_TABLET_AXIS_Y);
> +		}
> +
> +		libinput_event_destroy(event);
> +	}
> +	litest_assert_double_lt(x1, x2);
> +	litest_assert_double_lt(y1, y2);
> +}
> +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);
>  
>  	return litest_run(argc, argv);
>  }
> -- 
> 1.8.5.5
> 


More information about the wayland-devel mailing list