summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@bitplanet.net>2012-04-22 14:17:02 -0400
committerKristian Høgsberg <krh@bitplanet.net>2012-04-22 14:17:27 -0400
commite7dd32710f3fcff0bbbaf33807fb65b78a43e2fb (patch)
tree2f8a6df6308017fc2e9b59a6b8d82acf8331ec68
parent243672cd3ca35a6418176fbd16db033f40b92b90 (diff)
tests: Test invoking closures built with wl_closure_vmarshal()
-rw-r--r--tests/connection-test.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/connection-test.c b/tests/connection-test.c
index 72c32e6..54ac423 100644
--- a/tests/connection-test.c
+++ b/tests/connection-test.c
@@ -424,3 +424,41 @@ TEST(connection_marshal_alot)
release_marshal_data(&data);
}
+
+static void
+marshal_helper(const char *format, void *handler, ...)
+{
+ struct wl_closure closure;
+ static struct wl_object sender = { NULL, NULL, 1234 }, object;
+ static const int opcode = 4444;
+ struct wl_message message = { "test", format, NULL };
+ va_list ap;
+ int ret, done;
+
+ va_start(ap, handler);
+ ret = wl_closure_vmarshal(&closure, &sender, opcode, ap, &message);
+ va_end(ap);
+
+ assert(ret == 0);
+ done = 0;
+ wl_closure_invoke(&closure, &object, handler, &done);
+ wl_closure_destroy(&closure);
+ assert(done);
+}
+
+static void
+suu_handler(void *data, struct wl_object *object,
+ const char *s, uint32_t u1, uint32_t u2)
+{
+ int *done = data;
+
+ assert(strcmp(s, "foo") == 0);
+ assert(u1 = 500);
+ assert(u2 = 404040);
+ *done = 1;
+}
+
+TEST(invoke_closure)
+{
+ marshal_helper("suu", suu_handler, "foo", 500, 404040);
+}