summaryrefslogtreecommitdiff
path: root/tests/text-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/text-test.c')
-rw-r--r--tests/text-test.c214
1 files changed, 214 insertions, 0 deletions
diff --git a/tests/text-test.c b/tests/text-test.c
new file mode 100644
index 00000000..48f2b5a6
--- /dev/null
+++ b/tests/text-test.c
@@ -0,0 +1,214 @@
+/*
+ * 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 <string.h>
+#include <stdio.h>
+#include <linux/input.h>
+#include "weston-test-client-helper.h"
+#include "../clients/text-client-protocol.h"
+
+struct text_input_state {
+ int activated;
+ int deactivated;
+};
+
+static void
+text_input_commit_string(void *data,
+ struct wl_text_input *text_input,
+ uint32_t serial,
+ const char *text)
+{
+}
+
+static void
+text_input_preedit_string(void *data,
+ struct wl_text_input *text_input,
+ uint32_t serial,
+ const char *text,
+ const char *commit)
+{
+}
+
+static void
+text_input_delete_surrounding_text(void *data,
+ struct wl_text_input *text_input,
+ int32_t index,
+ uint32_t length)
+{
+}
+
+static void
+text_input_cursor_position(void *data,
+ struct wl_text_input *text_input,
+ int32_t index,
+ int32_t anchor)
+{
+}
+
+static void
+text_input_preedit_styling(void *data,
+ struct wl_text_input *text_input,
+ uint32_t index,
+ uint32_t length,
+ uint32_t style)
+{
+}
+
+static void
+text_input_preedit_cursor(void *data,
+ struct wl_text_input *text_input,
+ int32_t index)
+{
+}
+
+static void
+text_input_modifiers_map(void *data,
+ struct wl_text_input *text_input,
+ struct wl_array *map)
+{
+}
+
+static void
+text_input_keysym(void *data,
+ struct wl_text_input *text_input,
+ uint32_t serial,
+ uint32_t time,
+ uint32_t sym,
+ uint32_t state,
+ uint32_t modifiers)
+{
+}
+
+static void
+text_input_enter(void *data,
+ struct wl_text_input *text_input,
+ struct wl_surface *surface)
+
+{
+ struct text_input_state *state = data;
+
+ fprintf(stderr, "%s\n", __FUNCTION__);
+
+ state->activated += 1;
+}
+
+static void
+text_input_leave(void *data,
+ struct wl_text_input *text_input)
+{
+ struct text_input_state *state = data;
+
+ state->deactivated += 1;
+}
+
+static void
+text_input_input_panel_state(void *data,
+ struct wl_text_input *text_input,
+ uint32_t state)
+{
+}
+
+static void
+text_input_language(void *data,
+ struct wl_text_input *text_input,
+ uint32_t serial,
+ const char *language)
+{
+}
+
+static void
+text_input_text_direction(void *data,
+ struct wl_text_input *text_input,
+ uint32_t serial,
+ uint32_t direction)
+{
+}
+
+static const struct wl_text_input_listener text_input_listener = {
+ text_input_enter,
+ text_input_leave,
+ text_input_modifiers_map,
+ text_input_input_panel_state,
+ text_input_preedit_string,
+ text_input_preedit_styling,
+ text_input_preedit_cursor,
+ text_input_commit_string,
+ text_input_cursor_position,
+ text_input_delete_surrounding_text,
+ text_input_keysym,
+ text_input_language,
+ text_input_text_direction
+};
+
+TEST(text_test)
+{
+ struct client *client;
+ struct global *global;
+ struct wl_text_input_manager *factory;
+ struct wl_text_input *text_input;
+ struct text_input_state state;
+
+ client = client_create(100, 100, 100, 100);
+ assert(client);
+
+ factory = NULL;
+ wl_list_for_each(global, &client->global_list, link) {
+ if (strcmp(global->interface, "wl_text_input_manager") == 0)
+ factory = wl_registry_bind(client->wl_registry,
+ global->name,
+ &wl_text_input_manager_interface, 1);
+ }
+
+ assert(factory);
+
+ memset(&state, 0, sizeof state);
+ text_input = wl_text_input_manager_create_text_input(factory);
+ wl_text_input_add_listener(text_input, &text_input_listener, &state);
+
+ /* Make sure our test surface has keyboard focus. */
+ wl_test_activate_surface(client->test->wl_test,
+ client->surface->wl_surface);
+ client_roundtrip(client);
+ assert(client->input->keyboard->focus == client->surface);
+
+ /* Activate test model and make sure we get enter event. */
+ wl_text_input_activate(text_input, client->input->wl_seat,
+ client->surface->wl_surface);
+ client_roundtrip(client);
+ assert(state.activated == 1 && state.deactivated == 0);
+
+ /* Deactivate test model and make sure we get leave event. */
+ wl_text_input_deactivate(text_input, client->input->wl_seat);
+ client_roundtrip(client);
+ assert(state.activated == 1 && state.deactivated == 1);
+
+ /* Activate test model again. */
+ wl_text_input_activate(text_input, client->input->wl_seat,
+ client->surface->wl_surface);
+ client_roundtrip(client);
+ assert(state.activated == 2 && state.deactivated == 1);
+
+ /* Take keyboard focus away and verify we get leave event. */
+ wl_test_activate_surface(client->test->wl_test, NULL);
+ client_roundtrip(client);
+ assert(state.activated == 2 && state.deactivated == 2);
+}