[PATCH wayland] tests: add test for receiving an error on destroyed object

Marek Chalupa mchqwerty at gmail.com
Mon Feb 22 13:37:00 UTC 2016


test if receiving an error on already destroyed object won't
do any harm

Signed-off-by: Marek Chalupa <mchqwerty at 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



More information about the wayland-devel mailing list