From: Alexandros Frantzis Date: Thu, 8 Feb 2018 13:37:56 +0000 (+0200) Subject: tests: Support setting the test client input dynamically X-Git-Tag: upstream/5.0.0~266 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=468bd0b9c87e3dc6bf152af3bf48a16dc1ed696c;p=platform%2Fupstream%2Fweston.git tests: Support setting the test client input dynamically The current test client code waits for all wl_seat globals to arrive before checking them and deciding which one is the test seat global to use for the input object. Test code that needs to add/remove test seats would have to call the client_set_input() function for any seat changes to take effect. Although we could allow this by making client_set_input() public, we would be exposing unecessary implementation details. This commit applies any seat changes immediately upon arrival of the seat name, freeing test code from needing to call extra functions like client_set_input(). To achieve this the call to input_data_devices() is moved from client_set_input() to the seat name event handler. This commit also moves the check that all seats have names to an explicit test. To support this test, inputs corresponding to non-test seats are not destroyed (unless their seat global is removed), as was previously the case. Signed-off-by: Alexandros Frantzis Reviewed-by: Pekka Paalanen --- diff --git a/tests/devices-test.c b/tests/devices-test.c index 450713e..ce1cea3 100644 --- a/tests/devices-test.c +++ b/tests/devices-test.c @@ -310,3 +310,13 @@ TEST(get_device_after_destroy_multiple) get_device_after_destroy(); } } + +TEST(seats_have_names) +{ + struct client *cl = create_client_and_test_surface(100, 100, 100, 100); + struct input *input; + + wl_list_for_each(input, &cl->inputs, link) { + assert(input->seat_name); + } +} diff --git a/tests/weston-test-client-helper.c b/tests/weston-test-client-helper.c index 5ee032c..dc69e15 100644 --- a/tests/weston-test-client-helper.c +++ b/tests/weston-test-client-helper.c @@ -635,6 +635,15 @@ seat_handle_name(void *data, struct wl_seat *seat, const char *name) input->seat_name = strdup(name); assert(input->seat_name && "No memory"); + /* We only update the devices and set client input for the test seat */ + if (strcmp(name, "test-seat") == 0) { + assert(!input->client->input && + "Multiple test seats detected!"); + + input_update_devices(input); + input->client->input = input; + } + fprintf(stderr, "test-client: got seat %p name: \'%s\'\n", input, name); } @@ -726,6 +735,7 @@ handle_global(void *data, struct wl_registry *registry, &wl_compositor_interface, version); } else if (strcmp(interface, "wl_seat") == 0) { input = xzalloc(sizeof *input); + input->client = client; input->global_name = global->name; input->wl_seat = wl_registry_bind(registry, id, @@ -882,26 +892,6 @@ log_handler(const char *fmt, va_list args) vfprintf(stderr, fmt, args); } -/* find the test-seat and set it in client. - * Destroy other inputs */ -static void -client_set_input(struct client *cl) -{ - struct input *inp, *inptmp; - wl_list_for_each_safe(inp, inptmp, &cl->inputs, link) { - assert(inp->seat_name && "BUG: input with no name"); - if (strcmp(inp->seat_name, "test-seat") == 0) { - cl->input = inp; - input_update_devices(inp); - } else { - input_destroy(inp); - } - } - - /* we keep only one input */ - assert(wl_list_length(&cl->inputs) == 1); -} - struct client * create_client(void) { @@ -927,9 +917,6 @@ create_client(void) * events */ client_roundtrip(client); - /* find the right input for us */ - client_set_input(client); - /* must have WL_SHM_FORMAT_ARGB32 */ assert(client->has_argb); diff --git a/tests/weston-test-client-helper.h b/tests/weston-test-client-helper.h index fb31125..255bbf6 100644 --- a/tests/weston-test-client-helper.h +++ b/tests/weston-test-client-helper.h @@ -74,6 +74,7 @@ struct test { }; struct input { + struct client *client; uint32_t global_name; struct wl_seat *wl_seat; struct pointer *pointer;