[PATCH libinput 1/3] test: add litest_add_ranged* functionality

Hans de Goede hdegoede at redhat.com
Fri May 15 04:01:01 PDT 2015


Hi,

On 06-05-15 02:17, Peter Hutterer wrote:
> litest_add_ranged* takes a range parameter that serves as the lower/upper
> boundary for a loop. This enables tests to be run multiple times, avoiding the
> timeouts we triggered by having the loops inside (e.g. see 2bf8d035c and
> 6dd02468).
>
> This just wraps the underlying check framework, the ranged variable is
> available as "_i" in the test.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

The entire set LGTM:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans

> ---
>   test/litest.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++----------
>   test/litest.h | 20 +++++++++++++++++++
>   2 files changed, 74 insertions(+), 10 deletions(-)
>
> diff --git a/test/litest.c b/test/litest.c
> index 91f2747..48d3ca4 100644
> --- a/test/litest.c
> +++ b/test/litest.c
> @@ -184,7 +184,8 @@ litest_drop_udev_rules(void)
>   static void
>   litest_add_tcase_for_device(struct suite *suite,
>   			    void *func,
> -			    const struct litest_test_device *dev)
> +			    const struct litest_test_device *dev,
> +			    const struct range *range)
>   {
>   	struct test *t;
>   	const char *test_name = dev->shortname;
> @@ -193,7 +194,13 @@ litest_add_tcase_for_device(struct suite *suite,
>   		if (strcmp(t->name, test_name) != 0)
>   			continue;
>
> -		tcase_add_test(t->tc, func);
> +		if (range)
> +			tcase_add_loop_test(t->tc,
> +					    func,
> +					    range->lower,
> +					    range->upper);
> +		else
> +			tcase_add_test(t->tc, func);
>   		return;
>   	}
>
> @@ -216,7 +223,9 @@ litest_add_tcase_for_device(struct suite *suite,
>   }
>
>   static void
> -litest_add_tcase_no_device(struct suite *suite, void *func)
> +litest_add_tcase_no_device(struct suite *suite,
> +			   void *func,
> +			   const struct range *range)
>   {
>   	struct test *t;
>   	const char *test_name = "no device";
> @@ -225,7 +234,10 @@ litest_add_tcase_no_device(struct suite *suite, void *func)
>   		if (strcmp(t->name, test_name) != 0)
>   			continue;
>
> -		tcase_add_test(t->tc, func);
> +		if (range)
> +			tcase_add_loop_test(t->tc, func, range->lower, range->upper);
> +		else
> +			tcase_add_test(t->tc, func);
>   		return;
>   	}
>
> @@ -241,7 +253,8 @@ litest_add_tcase_no_device(struct suite *suite, void *func)
>   static void
>   litest_add_tcase(struct suite *suite, void *func,
>   		 enum litest_device_feature required,
> -		 enum litest_device_feature excluded)
> +		 enum litest_device_feature excluded,
> +		 const struct range *range)
>   {
>   	struct litest_test_device **dev = devices;
>
> @@ -250,17 +263,17 @@ litest_add_tcase(struct suite *suite, void *func,
>
>   	if (required == LITEST_DISABLE_DEVICE &&
>   	    excluded == LITEST_DISABLE_DEVICE) {
> -		litest_add_tcase_no_device(suite, func);
> +		litest_add_tcase_no_device(suite, func, range);
>   	} else if (required != LITEST_ANY || excluded != LITEST_ANY) {
>   		while (*dev) {
>   			if (((*dev)->features & required) == required &&
>   			    ((*dev)->features & excluded) == 0)
> -				litest_add_tcase_for_device(suite, func, *dev);
> +				litest_add_tcase_for_device(suite, func, *dev, range);
>   			dev++;
>   		}
>   	} else {
>   		while (*dev) {
> -			litest_add_tcase_for_device(suite, func, *dev);
> +			litest_add_tcase_for_device(suite, func, *dev, range);
>   			dev++;
>   		}
>   	}
> @@ -272,6 +285,18 @@ litest_add_no_device(const char *name, void *func)
>   	litest_add(name, func, LITEST_DISABLE_DEVICE, LITEST_DISABLE_DEVICE);
>   }
>
> +void
> +litest_add_ranged_no_device(const char *name,
> +			    void *func,
> +			    const struct range *range)
> +{
> +	litest_add_ranged(name,
> +			  func,
> +			  LITEST_DISABLE_DEVICE,
> +			  LITEST_DISABLE_DEVICE,
> +			  range);
> +}
> +
>   static struct suite *
>   get_suite(const char *name)
>   {
> @@ -302,7 +327,17 @@ litest_add(const char *name,
>   	   enum litest_device_feature required,
>   	   enum litest_device_feature excluded)
>   {
> -	litest_add_tcase(get_suite(name), func, required, excluded);
> +	litest_add_ranged(name, func, required, excluded, NULL);
> +}
> +
> +void
> +litest_add_ranged(const char *name,
> +		  void *func,
> +		  enum litest_device_feature required,
> +		  enum litest_device_feature excluded,
> +		  const struct range *range)
> +{
> +	litest_add_tcase(get_suite(name), func, required, excluded, range);
>   }
>
>   void
> @@ -310,6 +345,15 @@ litest_add_for_device(const char *name,
>   		      void *func,
>   		      enum litest_device_type type)
>   {
> +	litest_add_ranged_for_device(name, func, type, NULL);
> +}
> +
> +void
> +litest_add_ranged_for_device(const char *name,
> +			     void *func,
> +			     enum litest_device_type type,
> +			     const struct range *range)
> +{
>   	struct suite *s;
>   	struct litest_test_device **dev = devices;
>
> @@ -318,7 +362,7 @@ litest_add_for_device(const char *name,
>   	s = get_suite(name);
>   	while (*dev) {
>   		if ((*dev)->type == type) {
> -			litest_add_tcase_for_device(s, func, *dev);
> +			litest_add_tcase_for_device(s, func, *dev, range);
>   			return;
>   		}
>   		dev++;
> diff --git a/test/litest.h b/test/litest.h
> index f1a720c..451eac1 100644
> --- a/test/litest.h
> +++ b/test/litest.h
> @@ -95,6 +95,14 @@ struct litest_device {
>   	char *udev_rule_file;
>   };
>
> +/* A loop range, resolves to:
> +   for (i = lower; i < upper; i++)
> + */
> +struct range {
> +	int lower; /* inclusive */
> +	int upper; /* exclusive */
> +};
> +
>   struct libinput *litest_create_context(void);
>   void litest_disable_log_handler(struct libinput *libinput);
>   void litest_restore_log_handler(struct libinput *libinput);
> @@ -102,11 +110,23 @@ void litest_restore_log_handler(struct libinput *libinput);
>   void litest_add(const char *name, void *func,
>   		enum litest_device_feature required_feature,
>   		enum litest_device_feature excluded_feature);
> +void litest_add_ranged(const char *name,
> +		       void *func,
> +		       enum litest_device_feature required,
> +		       enum litest_device_feature excluded,
> +		       const struct range *range);
>   void
>   litest_add_for_device(const char *name,
>   		      void *func,
>   		      enum litest_device_type type);
> +void litest_add_ranged_for_device(const char *name,
> +				  void *func,
> +				  enum litest_device_type type,
> +				  const struct range *range);
>   void litest_add_no_device(const char *name, void *func);
> +void litest_add_ranged_no_device(const char *name,
> +				 void *func,
> +				 const struct range *range);
>
>   int litest_run(int argc, char **argv);
>   struct litest_device * litest_create_device(enum litest_device_type which);
>


More information about the wayland-devel mailing list