aboutsummaryrefslogtreecommitdiffstats
path: root/tests/queue-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/queue-test.c')
-rw-r--r--tests/queue-test.c112
1 files changed, 112 insertions, 0 deletions
diff --git a/tests/queue-test.c b/tests/queue-test.c
index 6562139..cb61a85 100644
--- a/tests/queue-test.c
+++ b/tests/queue-test.c
@@ -472,6 +472,106 @@ client_test_queue_destroy_default_with_attached_proxies(void)
}
static void
+check_queue_name(struct wl_proxy *proxy, const char *name)
+{
+ struct wl_event_queue *queue;
+ const char *queue_name;
+
+ queue = wl_proxy_get_queue(proxy);
+ queue_name = wl_event_queue_get_name(queue);
+ if (!name)
+ assert(!queue_name);
+ else
+ assert(strcmp(queue_name, name) == 0);
+}
+
+static struct wl_callback *
+roundtrip_named_queue_nonblock(struct wl_display *display,
+ struct wl_event_queue *queue,
+ const char *name)
+{
+ struct wl_callback *callback;
+ struct wl_display *wrapped_display = NULL;
+
+ if (queue) {
+ wrapped_display = wl_proxy_create_wrapper(display);
+ assert(wrapped_display);
+ wl_proxy_set_queue((struct wl_proxy *) wrapped_display, queue);
+ check_queue_name((struct wl_proxy *) wrapped_display, name);
+
+ callback = wl_display_sync(wrapped_display);
+ } else
+ callback = wl_display_sync(display);
+
+ check_queue_name((struct wl_proxy *) callback, name);
+
+ if (wrapped_display)
+ wl_proxy_wrapper_destroy(wrapped_display);
+
+ assert(callback != NULL);
+
+ return callback;
+}
+
+static void
+client_test_queue_names(void)
+{
+ struct wl_event_queue *queue1, *queue2, *queue3;
+ struct wl_display *display;
+ struct wl_callback *callback1, *callback2, *callback3, *callback4;
+ struct wl_event_queue *default_queue;
+ char *log;
+ size_t log_len;
+ const char *default_queue_name;
+
+ display = wl_display_connect(NULL);
+ assert(display);
+
+ default_queue = wl_proxy_get_queue((struct wl_proxy *) display);
+ default_queue_name = wl_event_queue_get_name(default_queue);
+ assert(strcmp(default_queue_name, "Default Queue") == 0);
+
+ /* Create some event queues both with and without names. */
+ queue1 = wl_display_create_queue_with_name(display, "First");
+ assert(queue1);
+
+ queue2 = wl_display_create_queue_with_name(display, "Second");
+ assert(queue2);
+
+ queue3 = wl_display_create_queue(display);
+ assert(queue3);
+
+ /* Create some requests and ensure their queues have the expected
+ * names.
+ */
+ callback1 = roundtrip_named_queue_nonblock(display, queue1, "First");
+ callback2 = roundtrip_named_queue_nonblock(display, queue2, "Second");
+ callback3 = roundtrip_named_queue_nonblock(display, queue3, NULL);
+ callback4 = roundtrip_named_queue_nonblock(display, NULL, "Default Queue");
+
+ /* Destroy one queue with proxies still attached so we can verify
+ * that the queue name is in the log message. */
+ wl_event_queue_destroy(queue2);
+ log = map_file(client_log_fd, &log_len);
+ assert(strstr(log, "Second"));
+
+ /* There's no reason for the First queue name to be present. */
+ assert(!strstr(log, "First"));
+
+ munmap(log, log_len);
+
+ wl_callback_destroy(callback1);
+ wl_callback_destroy(callback2);
+ wl_callback_destroy(callback3);
+ wl_callback_destroy(callback4);
+
+ wl_event_queue_destroy(queue1);
+ wl_event_queue_destroy(queue3);
+
+ wl_display_disconnect(display);
+}
+
+static void
dummy_bind(struct wl_client *client,
void *data, uint32_t version, uint32_t id)
{
@@ -597,3 +697,15 @@ TEST(queue_destroy_default_with_attached_proxies)
display_destroy(d);
}
+
+TEST(queue_names)
+{
+ struct display *d = display_create();
+
+ test_set_timeout(2);
+
+ client_create_noarg(d, client_test_queue_names);
+ display_run(d);
+
+ display_destroy(d);
+}