summaryrefslogtreecommitdiff
path: root/tests/text-test.c
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2012-12-11 23:03:56 -0500
committerKristian Høgsberg <krh@bitplanet.net>2012-12-11 23:04:14 -0500
commit1cb3df4e4604f2da32ec1f42ab768b9fb13a600f (patch)
tree9f33498b6fb10add3a699534618fc5d911043a1b /tests/text-test.c
parentba0cfdd284c543f9feb9e51d60323782155be3d5 (diff)
downloadweston-1cb3df4e4604f2da32ec1f42ab768b9fb13a600f.tar.gz
tests: Port text-test to new test framework
So much simpler this way and the test suite is now back too 100% pass.
Diffstat (limited to 'tests/text-test.c')
-rw-r--r--tests/text-test.c259
1 files changed, 117 insertions, 142 deletions
diff --git a/tests/text-test.c b/tests/text-test.c
index 942cb3b7..9492bd21 100644
--- a/tests/text-test.c
+++ b/tests/text-test.c
@@ -20,194 +20,169 @@
* 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 <stdio.h>
+#include <linux/input.h>
+#include "weston-test-client-helper.h"
+#include "../clients/text-client-protocol.h"
-#include "test-runner.h"
-
-struct text_test_data {
- struct weston_layer *layer;
-
- unsigned int expected_activated_count;
- unsigned int expected_deactivated_count;
-
- const char *next_command;
- void (*next_handle)(struct test_client *client);
+struct text_model_state {
+ int activated;
+ int deactivated;
};
static void
-pre_assert_state(struct test_client *client,
- unsigned int expected_activated_count,
- unsigned int expected_deactivated_count)
+text_model_commit_string(void *data,
+ struct text_model *text_model,
+ const char *text,
+ uint32_t index)
{
- unsigned int activated_count, deactivated_count;
-
- assert(sscanf(client->buf, "activated %u deactivated %u", &activated_count, &deactivated_count) == 2);
- fprintf(stderr, "Text model activations: %u deactivations: %u\n", activated_count, deactivated_count);
- assert(activated_count == expected_activated_count);
- assert(deactivated_count == expected_deactivated_count);
}
static void
-handle_assert_state(struct test_client *client)
+text_model_preedit_string(void *data,
+ struct text_model *text_model,
+ const char *text,
+ uint32_t index)
{
- struct text_test_data *data = client->data;
-
- pre_assert_state(client, data->expected_activated_count, data->expected_deactivated_count);
-
- test_client_send(client, data->next_command);
- client->handle = data->next_handle;
}
static void
-post_assert_state(struct test_client *client,
- unsigned int expected_activated_count,
- unsigned int expected_deactivated_count,
- const char *next_command,
- void (*next_handle)(struct test_client *client))
+text_model_delete_surrounding_text(void *data,
+ struct text_model *text_model,
+ int32_t index,
+ uint32_t length)
{
- struct text_test_data *data = client->data;
-
- data->expected_activated_count = expected_activated_count;
- data->expected_deactivated_count = expected_deactivated_count;
-
- data->next_command = next_command;
- data->next_handle = next_handle;
-
- test_client_send(client, "assert-state\n");
- client->handle = handle_assert_state;
}
-static struct weston_seat*
-get_seat(struct test_client *client)
+static void
+text_model_preedit_styling(void *data,
+ struct text_model *text_model)
{
- struct wl_list *seat_list;
- struct weston_seat *seat;
-
- seat_list = &client->compositor->seat_list;
- assert(wl_list_length(seat_list) == 1);
- seat = container_of(seat_list->next, struct weston_seat, link);
-
- return seat;
}
static void
-handle_surface_unfocus(struct test_client *client)
+text_model_modifiers_map(void *data,
+ struct text_model *text_model,
+ struct wl_array *map)
{
- struct weston_seat *seat;
-
- seat = get_seat(client);
-
- pre_assert_state(client, 2, 1);
-
- /* Unfocus the surface */
- wl_keyboard_set_focus(&seat->keyboard, NULL);
-
- post_assert_state(client, 2, 2, "bye\n", NULL);
}
static void
-handle_reactivate_text_model(struct test_client *client)
+text_model_keysym(void *data,
+ struct text_model *text_model,
+ uint32_t serial,
+ uint32_t time,
+ uint32_t sym,
+ uint32_t state,
+ uint32_t modifiers)
{
- pre_assert_state(client, 1, 1);
-
- /* text_model is activated */
-
- post_assert_state(client, 2, 1,
- "assert-state\n", handle_surface_unfocus);
}
static void
-handle_deactivate_text_model(struct test_client *client)
+text_model_selection_replacement(void *data,
+ struct text_model *text_model)
{
- pre_assert_state(client, 1, 0);
-
- /* text_model is deactivated */
-
- post_assert_state(client, 1, 1,
- "activate-text-model\n", handle_reactivate_text_model);
}
static void
-handle_activate_text_model(struct test_client *client)
+text_model_direction(void *data,
+ struct text_model *text_model)
{
- pre_assert_state(client, 0, 0);
-
- /* text_model is activated */
+}
- post_assert_state(client, 1, 0,
- "deactivate-text-model\n", handle_deactivate_text_model);
+static void
+text_model_locale(void *data,
+ struct text_model *text_model)
+{
}
static void
-handle_text_model(struct test_client *client)
+text_model_enter(void *data,
+ struct text_model *text_model,
+ struct wl_surface *surface)
+
{
- uint32_t id;
- struct wl_resource *resource;
+ struct text_model_state *state = data;
- assert(sscanf(client->buf, "text_model %u", &id) == 1);
- fprintf(stderr, "got text_model id %u\n", id);
- resource = wl_client_get_object(client->client, id);
- assert(resource);
- assert(strcmp(resource->object.interface->name, "text_model") == 0);
+ fprintf(stderr, "%s\n", __FUNCTION__);
- test_client_send(client, "activate-text-model\n");
- client->handle = handle_activate_text_model;
+ state->activated += 1;
}
static void
-handle_surface(struct test_client *client)
+text_model_leave(void *data,
+ struct text_model *text_model)
{
- uint32_t id;
- struct wl_resource *resource;
- struct weston_surface *surface;
- struct text_test_data *data = client->data;
- struct weston_seat *seat;
-
- assert(sscanf(client->buf, "surface %u", &id) == 1);
- fprintf(stderr, "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);
-
- surface = (struct weston_surface *) resource;
-
- weston_surface_configure(surface, 100, 100, 200, 200);
- weston_surface_update_transform(surface);
- weston_surface_set_color(surface, 0.0, 0.0, 0.0, 1.0);
-
- data->layer = malloc(sizeof *data->layer);
- weston_layer_init(data->layer, &client->compositor->cursor_layer.link);
- wl_list_insert(&data->layer->surface_list, &surface->layer_link);
- weston_surface_damage(surface);
-
- seat = get_seat(client);
- client->compositor->focus = 1; /* Make it work even if pointer is
- * outside X window. */
- wl_keyboard_set_focus(&seat->keyboard, &surface->surface);
-
- test_client_send(client, "create-text-model\n");
- client->handle = handle_text_model;
+ struct text_model_state *state = data;
+
+ state->deactivated += 1;
}
+static const struct text_model_listener text_model_listener = {
+ text_model_commit_string,
+ text_model_preedit_string,
+ text_model_delete_surrounding_text,
+ text_model_preedit_styling,
+ text_model_modifiers_map,
+ text_model_keysym,
+ text_model_selection_replacement,
+ text_model_direction,
+ text_model_locale,
+ text_model_enter,
+ text_model_leave
+};
+
TEST(text_test)
{
- struct test_client *client;
- struct text_test_data *data;
-
- client = test_client_launch(compositor, "test-text-client");
- client->terminate = 1;
-
- test_client_send(client, "create-surface\n");
- client->handle = handle_surface;
-
- data = malloc(sizeof *data);
- assert(data);
- client->data = data;
-
+ struct client *client;
+ struct global *global;
+ struct text_model_factory *factory;
+ struct text_model *text_model;
+ struct text_model_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, "text_model_factory") == 0)
+ factory = wl_registry_bind(client->wl_registry,
+ global->name,
+ &text_model_factory_interface, 1);
+ }
+
+ assert(factory);
+
+ memset(&state, 0, sizeof state);
+ text_model = text_model_factory_create_text_model(factory);
+ text_model_add_listener(text_model, &text_model_listener, &state);
+
+ /* Make sure our test surface has keyboard focus. */
+ wl_test_activate_surface(client->test->wl_test,
+ client->surface->wl_surface);
+ wl_display_roundtrip(client->wl_display);
+ assert(client->input->keyboard->focus == client->surface);
+
+ /* Activate test model and make sure we get enter event. */
+ text_model_activate(text_model, client->input->wl_seat,
+ client->surface->wl_surface);
+ wl_display_roundtrip(client->wl_display);
+ assert(state.activated == 1 && state.deactivated == 0);
+
+ /* Deactivate test model and make sure we get leave event. */
+ text_model_deactivate(text_model, client->input->wl_seat);
+ wl_display_roundtrip(client->wl_display);
+ assert(state.activated == 1 && state.deactivated == 1);
+
+ /* Activate test model again. */
+ text_model_activate(text_model, client->input->wl_seat,
+ client->surface->wl_surface);
+ wl_display_roundtrip(client->wl_display);
+ 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);
+ wl_display_roundtrip(client->wl_display);
+ assert(state.activated == 2 && state.deactivated == 2);
}