On Mon, Feb 22, 2016 at 02:37:00PM +0100, Marek Chalupa wrote:
> test if receiving an error on already destroyed object won't
> do any harm
> 
> Signed-off-by: Marek Chalupa <mchqwe...@gmail.com>

Reviewed-by: Jonas Ådahl <jad...@gmail.com>

> ---
>  tests/display-test.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 50 insertions(+)
> 
> diff --git a/tests/display-test.c b/tests/display-test.c
> index 1a6c345..f9f8160 100644
> --- a/tests/display-test.c
> +++ b/tests/display-test.c
> @@ -876,3 +876,53 @@ TEST(versions)
>  
>       display_destroy(d);
>  }
> +
> +static void
> +check_error_on_destroyed_object(void *data)
> +{
> +     struct client *c;
> +     struct wl_seat *seat;
> +     uint32_t id;
> +     const struct wl_interface *intf;
> +
> +     c = client_connect();
> +     seat = client_get_seat(c);
> +
> +     /* destroy the seat proxy. The display won't know
> +      * about it yet, so it will post the error as usual */
> +     wl_proxy_destroy((struct wl_proxy *) seat);
> +
> +     /* let display post the error. The error will
> +      * be caught in stop_display while dispatching */
> +     assert(stop_display(c, 1) == -1);
> +
> +     /* check the returned error. Since the object was destroyed,
> +      * we don't know the interface and id */
> +     assert(wl_display_get_error(c->wl_display) == EPROTO);
> +     assert(wl_display_get_protocol_error(c->wl_display, &intf, &id) == 23);
> +     assert(intf == NULL);
> +     assert(id == 0);
> +
> +     client_disconnect_nocheck(c);
> +}
> +
> +TEST(error_on_destroyed_object)
> +{
> +     struct client_info *cl;
> +     struct display *d = display_create();
> +
> +     wl_global_create(d->wl_display, &wl_seat_interface,
> +                      1, d, bind_seat);
> +
> +     cl = client_create_noarg(d, check_error_on_destroyed_object);
> +     display_run(d);
> +
> +     /* did client bind to the seat? */
> +     assert(cl->data);
> +
> +     /* post error on the destroyed object */
> +     wl_resource_post_error((struct wl_resource *) cl->data,
> +                            23, "Dummy error");
> +     display_resume(d);
> +     display_destroy(d);
> +}
> -- 
> 2.5.0
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to