Commit 56462365 authored by Marek Chalupa's avatar Marek Chalupa Committed by Pekka Paalanen

tests: add test for receiving an error on destroyed object

test if receiving an error on already destroyed object won't
do any harm
Signed-off-by: default avatarMarek Chalupa <mchqwerty@gmail.com>
Reviewed-by: Jonas Ådahl's avatarJonas Ådahl <jadahl@gmail.com>
Reviewed-by: default avatarBryce Harrington <bryce@osg.samsung.com>
Tested-by: default avatarBryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
parent 25fcb88a
......@@ -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);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment