diff --git a/tests/.gitignore b/tests/.gitignore index c6d0f4b1..4c6b430c 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -7,3 +7,4 @@ wayland-test-protocol.c wayland-test-server-protocol.h keyboard-test event-test +button-test diff --git a/tests/Makefile.am b/tests/Makefile.am index 0dfd98f9..d7014bed 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,13 +1,15 @@ TESTS = $(module_tests) $(weston_tests) -module_tests = surface-test.la client-test.la \ +module_tests = \ + surface-test.la \ + client-test.la \ text-test.la \ - surface-global-test.la \ - button-test.la + surface-global-test.la weston_tests = \ keyboard-test \ - event-test + event-test \ + button-test TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/weston-tests-env @@ -38,7 +40,6 @@ surface_global_test_la_SOURCES = surface-global-test.c $(test_runner_src) surface_test_la_SOURCES = surface-test.c $(test_runner_src) client_test_la_SOURCES = client-test.c $(test_runner_src) text_test_la_SOURCES = text-test.c $(test_runner_src) -button_test_la_SOURCES = button-test.c $(test_runner_src) test_client_SOURCES = test-client.c test_client_LDADD = $(SIMPLE_CLIENT_LIBS) @@ -74,6 +75,9 @@ keyboard_test_LDADD = $(weston_test_client_libs) event_test_SOURCES = event-test.c $(weston_test_client_src) event_test_LDADD = $(weston_test_client_libs) +button_test_SOURCES = button-test.c $(weston_test_client_src) +button_test_LDADD = $(weston_test_client_libs) + matrix_test_SOURCES = \ matrix-test.c \ $(top_srcdir)/shared/matrix.c \ diff --git a/tests/button-test.c b/tests/button-test.c index 67af1e61..0f9367e6 100644 --- a/tests/button-test.c +++ b/tests/button-test.c @@ -20,119 +20,35 @@ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include -#include -#include -#include -#include -#include #include +#include "weston-test-client-helper.h" -#include "test-runner.h" - -struct context { - struct weston_layer *layer; - struct weston_seat *seat; - struct weston_surface *surface; -}; - -static void -handle_button_up(struct test_client *); - -static void -handle_button_down(struct test_client *client) +TEST(simple_button_test) { - struct context *context = client->data; - uint32_t mask; + struct client *client; + struct pointer *pointer; - assert(sscanf(client->buf, "%u", &mask) == 1); - - assert(mask == 1); + client = client_create(100, 100, 100, 100); + assert(client); - notify_button(context->seat, 100, BTN_LEFT, - WL_POINTER_BUTTON_STATE_RELEASED); + pointer = client->input->pointer; - test_client_send(client, "send-button-state\n"); - client->handle = handle_button_up; -} - -static void -handle_button_up(struct test_client *client) -{ - struct context *context = client->data; - static int once = 0; - uint32_t mask; - - assert(sscanf(client->buf, "%u", &mask) == 1); - - assert(mask == 0); - - if (!once++) { - notify_button(context->seat, 100, BTN_LEFT, - WL_POINTER_BUTTON_STATE_PRESSED); - - test_client_send(client, "send-button-state\n"); - client->handle = handle_button_down; - } else { - test_client_send(client, "bye\n"); - client->handle = NULL; - } -} - -static void -handle_surface(struct test_client *client) -{ - uint32_t id; - struct context *context = client->data; - struct wl_resource *resource; - struct wl_list *seat_list; - - assert(sscanf(client->buf, "surface %u", &id) == 1); - fprintf(stderr, "server: got surface id %u\n", id); - resource = wl_client_get_object(client->client, id); - assert(resource); - assert(strcmp(resource->object.interface->name, "wl_surface") == 0); - - context->surface = (struct weston_surface *) resource; - weston_surface_set_color(context->surface, 0.0, 0.0, 0.0, 1.0); - - context->layer = malloc(sizeof *context->layer); - assert(context->layer); - weston_layer_init(context->layer, - &client->compositor->cursor_layer.link); - wl_list_insert(&context->layer->surface_list, - &context->surface->layer_link); - - seat_list = &client->compositor->seat_list; - assert(wl_list_length(seat_list) == 1); - context->seat = container_of(seat_list->next, struct weston_seat, link); - - client->compositor->focus = 1; /* Make it work even if pointer is - * outside X window. */ - - weston_surface_configure(context->surface, 100, 100, 100, 100); - weston_surface_update_transform(context->surface); - weston_surface_damage(context->surface); - - notify_pointer_focus(context->seat, context->surface->output, - wl_fixed_from_int(150), wl_fixed_from_int(150)); - - test_client_send(client, "send-button-state\n"); - client->handle = handle_button_up; -} - -TEST(button_test) -{ - struct context *context; - struct test_client *client; - - client = test_client_launch(compositor, "test-client"); - client->terminate = 1; - - test_client_send(client, "create-surface\n"); - client->handle = handle_surface; - - context = calloc(1, sizeof *context); - assert(context); - client->data = context; + assert(pointer->button == 0); + assert(pointer->state == 0); + + move_pointer(client, 150, 150); + assert(pointer->x == 50); + assert(pointer->y == 50); + + wl_test_send_button(client->test->wl_test, BTN_LEFT, + WL_POINTER_BUTTON_STATE_PRESSED); + yield(client); + assert(pointer->button == BTN_LEFT); + assert(pointer->state == WL_POINTER_BUTTON_STATE_PRESSED); + + wl_test_send_button(client->test->wl_test, BTN_LEFT, + WL_POINTER_BUTTON_STATE_RELEASED); + yield(client); + assert(pointer->button == BTN_LEFT); + assert(pointer->state == WL_POINTER_BUTTON_STATE_RELEASED); }