[PATCH] tests: add button test

Eoff, Ullysses A ullysses.a.eoff at intel.com
Fri Sep 28 06:07:07 PDT 2012


Ignore this patch... resubmitting as a series to address coding conventions.

U. Artie


>-----Original Message-----
>From: Eoff, Ullysses A
>Sent: Wednesday, September 26, 2012 3:09 PM
>To: wayland-devel at lists.freedesktop.org
>Cc: Eoff, Ullysses A
>Subject: [PATCH] tests: add button test
>
>From: "U. Artie Eoff" <ullysses.a.eoff at intel.com>
>
>Signed-off-by: U. Artie Eoff <ullysses.a.eoff at intel.com>
>---
> tests/Makefile.am   |   4 +-
> tests/button-test.c | 136
>++++++++++++++++++++++++++++++++++++++++++++++++++++
> tests/test-client.c |  18 ++++++-
> 3 files changed, 156 insertions(+), 2 deletions(-)
> create mode 100644 tests/button-test.c
>
>diff --git a/tests/Makefile.am b/tests/Makefile.am
>index 60c73a1..fcf6674 100644
>--- a/tests/Makefile.am
>+++ b/tests/Makefile.am
>@@ -1,6 +1,7 @@
> TESTS = surface-test.la client-test.la	\
> 	event-test.la text-test.la	\
>-	surface-global-test.la
>+	surface-global-test.la		\
>+	button-test.la
>
> TESTS_ENVIRONMENT = $(SHELL) $(top_srcdir)/tests/weston-test
>
>@@ -22,6 +23,7 @@ surface_test_la_SOURCES = surface-test.c
>$(test_runner_src)
> client_test_la_SOURCES = client-test.c $(test_runner_src)
> event_test_la_SOURCES = event-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)
>diff --git a/tests/button-test.c b/tests/button-test.c
>new file mode 100644
>index 0000000..437291a
>--- /dev/null
>+++ b/tests/button-test.c
>@@ -0,0 +1,136 @@
>+/*
>+ * Copyright © 2012 Intel Corporation
>+ *
>+ * Permission to use, copy, modify, distribute, and sell this software and
>+ * its documentation for any purpose is hereby granted without fee,
>provided
>+ * that the above copyright notice appear in all copies and that both that
>+ * copyright notice and this permission notice appear in supporting
>+ * documentation, and that the name of the copyright holders not be used in
>+ * advertising or publicity pertaining to distribution of the software
>+ * without specific, written prior permission.  The copyright holders make
>+ * no representations about the suitability of this software for any
>+ * purpose.  It is provided "as is" without express or implied warranty.
>+ *
>+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO
>THIS
>+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
>AND
>+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
>+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
>WHATSOEVER
>+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
>ACTION OF
>+ * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
>OR IN
>+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
>+ */
>+
>+#include <stdlib.h>
>+#include <stdio.h>
>+#include <sys/socket.h>
>+#include <assert.h>
>+#include <unistd.h>
>+#include <string.h>
>+#include <linux/input.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)
>+{
>+	struct context *context = client->data;
>+	uint32_t mask;
>+
>+	assert(sscanf(client->buf, "%u", &mask) == 1);
>+
>+	assert(mask == 1);
>+
>+	notify_button(context->seat, 100, BTN_LEFT,
>+		WL_POINTER_BUTTON_STATE_RELEASED);
>+
>+	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;
>+}
>diff --git a/tests/test-client.c b/tests/test-client.c
>index f8a1a7b..3765305 100644
>--- a/tests/test-client.c
>+++ b/tests/test-client.c
>@@ -311,7 +311,21 @@ static const struct wl_surface_listener
>surface_listener = {
> };
>
> static void
>-send_state(int fd, struct display* display)
>+send_button_state(int fd, struct display *display)
>+{
>+	char buf[64];
>+	int len;
>+
>+	wl_display_flush(display->display);
>+
>+	len = snprintf(buf, sizeof buf, "%u\n", display->input->button_mask);
>+	assert(write(fd, buf, len) == len);
>+
>+	wl_display_roundtrip(display->display);
>+}
>+
>+static void
>+send_state(int fd, struct display *display)
> {
> 	char buf[64];
> 	int len;
>@@ -398,6 +412,8 @@ int main(int argc, char *argv[])
> 			create_surface(fd, display);
> 		} else if (strncmp(buf, "send-state\n", ret) == 0) {
> 			send_state(fd, display);
>+		} else if (strncmp(buf, "send-button-state\n", ret) == 0) {
>+			send_button_state(fd, display);
> 		} else {
> 			fprintf(stderr, "test-client: unknown command
>%.*s\n", ret, buf);
> 			return -1;
>--
>1.7.11.2



More information about the wayland-devel mailing list