summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2012-03-05 22:26:17 -0500
committerKristian Høgsberg <krh@bitplanet.net>2012-03-05 22:26:17 -0500
commit4bc5a0ab2c34c2541148147e6e1be774fc447e53 (patch)
treea17b75ecd5366eac5ced6fd7f19d2997ccc9eeb7
parentb2afde6f184dfe1c3cca656dc1f9862a45bfa24d (diff)
tests: Add demarshal tests
-rw-r--r--tests/connection-test.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/tests/connection-test.c b/tests/connection-test.c
index b45532f..d94544c 100644
--- a/tests/connection-test.c
+++ b/tests/connection-test.c
@@ -215,3 +215,80 @@ TEST(connection_marshal)
wl_connection_destroy(data.connection);
close(data.s[1]);
}
+
+static void
+validate_demarshal_u(void *data, struct wl_object *object, uint32_t u)
+{
+ uint32_t *msg = data;
+
+ assert(object->id = msg[0]);
+ assert(msg[2] == u);
+}
+
+static void
+validate_demarshal_i(void *data, struct wl_object *object, int32_t i)
+{
+ uint32_t *msg = data;
+
+ assert(object->id = msg[0]);
+ assert((int32_t) msg[2] == i);
+}
+
+static void
+validate_demarshal_s(void *data, struct wl_object *object, const char *s)
+{
+ uint32_t *msg = data;
+
+ assert(object->id = msg[0]);
+ fprintf(stderr, "s = %s\n", s);
+ assert(strcmp(s, "superdude") == 0);
+}
+
+static void
+demarshal(struct marshal_data *data, const char *format,
+ uint32_t *msg, void (*func)(void))
+{
+ struct wl_message message = { "test", format, NULL };
+ struct wl_closure *closure;
+ struct wl_map objects;
+ struct wl_object object;
+ int size = msg[1];
+
+ assert(write(data->s[1], msg, size) == size);
+ assert(wl_connection_data(data->connection,
+ WL_CONNECTION_READABLE) == size);
+
+ wl_map_init(&objects);
+ object.id = msg[0];
+ closure = wl_connection_demarshal(data->connection,
+ size, &objects, &message);
+ wl_closure_invoke(closure, &object, func, msg);
+}
+
+TEST(connection_demarshal)
+{
+ struct marshal_data data;
+ uint32_t msg[10];
+ static const char text[] = "superdude";
+
+ data.connection = setup(data.s, &data.mask);
+
+ msg[0] = 400200; /* object id */
+ msg[1] = 12; /* size = 12, opcode = 0 */
+ msg[2] = 8000;
+ demarshal(&data, "u", msg, (void *) validate_demarshal_u);
+
+ msg[0] = 400200;
+ msg[1] = 12;
+ msg[2] = -557799;
+ demarshal(&data, "i", msg, (void *) validate_demarshal_i);
+
+ msg[0] = 400200;
+ msg[1] = 24;
+ msg[2] = 10;
+ memcpy(&msg[3], text, msg[2]);
+ demarshal(&data, "s", msg, (void *) validate_demarshal_s);
+
+ wl_connection_destroy(data.connection);
+ close(data.s[1]);
+}