[PATCH wayland 5/5] tests: test whether the destroyed object is set to NULL on client destruction
Marek Chalupa
mchqwerty at gmail.com
Fri May 13 13:01:22 UTC 2016
when the client is being destroyed, we can use wl_client_get_object()
to get an object. Test whether it returns NULL when the object
has been destroyed
Signed-off-by: Marek Chalupa <mchqwerty at gmail.com>
---
tests/client-test.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 63 insertions(+)
diff --git a/tests/client-test.c b/tests/client-test.c
index cb08e39..f171f19 100644
--- a/tests/client-test.c
+++ b/tests/client-test.c
@@ -126,3 +126,66 @@ TEST(client_post_nomem_on_destruction)
wl_display_destroy(display);
}
+static void
+seat_destroy_get_object(struct wl_listener *l, void *data)
+{
+ struct wl_resource *resource = data;
+ struct wl_client *client = wl_resource_get_client(resource);
+ /* This seat was created last,
+ * therefore the seat's id is the upper bound for all ids */
+ uint32_t max_id = wl_resource_get_id(resource);
+ uint32_t i;
+
+ for (i = WL_SERVER_ID_START; i < max_id; ++i) {
+ /* all these objects are destroyed now, since
+ * we destroy the objects in id order */
+ assert(wl_client_get_object(client, i) == NULL);
+ }
+
+ /* only our object is not still destroyed */
+ assert(wl_client_get_object(client, max_id) != NULL);
+ assert(wl_client_get_object(client, max_id + 1) == NULL);
+}
+
+TEST(client_get_object_on_destruction)
+{
+ struct wl_display *display;
+ struct wl_client *client;
+ struct wl_resource *resource;
+ int s[2];
+
+ assert(socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, s) == 0);
+ display = wl_display_create();
+ assert(display);
+ client = wl_client_create(display, s[0]);
+ assert(client);
+
+ /* create few other objects
+ * -- it doesn't matter what is the interface */
+ resource = wl_resource_create(client, &wl_seat_interface,
+ wl_seat_interface.version, 0);
+ assert(resource);
+ resource = wl_resource_create(client, &wl_seat_interface,
+ wl_seat_interface.version, 0);
+ assert(resource);
+ resource = wl_resource_create(client, &wl_seat_interface,
+ wl_seat_interface.version, 0);
+ assert(resource);
+
+
+ /* for the last one we set destroy listener */
+ resource = wl_resource_create(client, &wl_seat_interface,
+ wl_seat_interface.version, 0);
+ assert(resource);
+
+ seat_destroy_listener.notify = seat_destroy_get_object;
+ wl_resource_add_destroy_listener(resource, &seat_destroy_listener);
+
+ wl_client_destroy(client);
+
+ close(s[0]);
+ close(s[1]);
+
+ wl_display_destroy(display);
+}
+
--
2.5.5
More information about the wayland-devel
mailing list