diff options
Diffstat (limited to 'tests/queue-test.c')
| -rw-r--r-- | tests/queue-test.c | 112 |
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); +} |
