On Mon, Aug 08, 2016 at 10:10:52AM +0200, Olivier Fourdan wrote:
> Test if the global filter is effectively filtering out the global when
> the filter returns false.
> 
> Signed-off-by: Olivier Fourdan <[email protected]>

1-3 looks good to me and are
Reviewed-by: Jonas Ådahl <[email protected]>

One nit below. Also could be good to test the illegal bind, i.e. a
client that binds a non-advertised by existing global.

> ---
>  v3: split out as its own commit
> 
>  tests/display-test.c | 58 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 58 insertions(+)
> 
> diff --git a/tests/display-test.c b/tests/display-test.c
> index 17956db..3679772 100644
> --- a/tests/display-test.c
> +++ b/tests/display-test.c
> @@ -125,6 +125,7 @@ struct handler_info {
>       struct wl_seat *seat;
>       uint32_t bind_version;
>       bool use_unversioned;
> +     bool has_data_offer;
>  };
>  
>  static void
> @@ -145,6 +146,8 @@ registry_handle_globals(void *data, struct wl_registry 
> *registry,
>                       hi->seat = wl_registry_bind(registry, id,
>                                                   &wl_seat_interface, ver);
>               assert(hi->seat);
> +     } else if (strcmp(intf, "wl_data_offer") == 0) {
> +             hi->has_data_offer = true;
>       }
>  }
>  
> @@ -926,3 +929,58 @@ TEST(error_on_destroyed_object)
>       display_resume(d);
>       display_destroy(d);
>  }
> +
> +static bool
> +global_filter(const struct wl_client *client,
> +                   const struct wl_global *global,
> +                   void *data)
> +{
> +     /* Hide the wl_data_offer interface */
> +     if (wl_global_get_interface(global) == &wl_data_offer_interface)
> +             return false;
> +
> +     /* Show all the others */
> +     return true;
> +}
> +
> +static void
> +bind_data_offer(struct wl_client *client, void *data,
> +             uint32_t vers, uint32_t id)
> +{
> +     struct display *d = data;
> +     struct client_info *ci;
> +     struct wl_resource *res;
> +
> +     ci = find_client_info(d, client);
> +     assert(ci);
> +
> +     res = wl_resource_create(client, &wl_data_offer_interface, vers, id);
> +     assert(res);
> +}
> +
> +TEST(filter)
> +{
> +     struct handler_info hi;
> +     struct display *d;
> +     struct wl_global *g1, *g2;
> +
> +     d = display_create();
> +
> +     g1 = wl_global_create(d->wl_display, &wl_seat_interface,
> +                           1, d, bind_seat);
> +     g2 = wl_global_create(d->wl_display, &wl_data_offer_interface,
> +                           1, d, bind_data_offer);
> +     wl_display_set_filter_global(d->wl_display, global_filter, NULL);
> +
> +     hi.has_data_offer = false;
> +     client_create(d, seat_version, &hi);
> +     assert(hi.seat != NULL);
> +     assert(hi.has_data_offer != true);

I guess this could just as well be "== false".


Jonas

> +
> +     display_run(d);
> +
> +     wl_global_destroy(g1);
> +     wl_global_destroy(g2);
> +
> +     display_destroy(d);
> +}
> -- 
> 2.7.4
> 
_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to