connection-test: Store expected result in struct marshal_data
authorKristian Høgsberg <krh@bitplanet.net>
Fri, 23 Mar 2012 20:56:19 +0000 (16:56 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 23 Mar 2012 20:56:19 +0000 (16:56 -0400)
tests/connection-test.c

index 6afb67e..f805624 100644 (file)
@@ -146,6 +146,11 @@ struct marshal_data {
        uint32_t read_mask;
        uint32_t write_mask;
        uint32_t buffer[10];
+       union {
+               uint32_t u;
+               int32_t i;
+               const char *s;
+       } value;
 };
 
 static void
@@ -244,30 +249,24 @@ TEST(connection_marshal)
 }
 
 static void
-validate_demarshal_u(void *data, struct wl_object *object, uint32_t u)
+validate_demarshal_u(struct marshal_data *data,
+                    struct wl_object *object, uint32_t u)
 {
-       uint32_t *msg = data;
-
-       assert(object->id = msg[0]);
-       assert(msg[2] == u);
+       assert(data->value.u == u);
 }
 
 static void
-validate_demarshal_i(void *data, struct wl_object *object, int32_t i)
+validate_demarshal_i(struct marshal_data *data,
+                    struct wl_object *object, int32_t i)
 {
-       uint32_t *msg = data;
-
-       assert(object->id = msg[0]);
-       assert((int32_t) msg[2] == i);
+       assert(data->value.i == i);
 }
 
 static void
-validate_demarshal_s(void *data, struct wl_object *object, const char *s)
+validate_demarshal_s(struct marshal_data *data,
+                    struct wl_object *object, const char *s)
 {
-       uint32_t *msg = data;
-
-       assert(object->id = msg[0]);
-       assert(strcmp(s, "superdude") == 0);
+       assert(strcmp(data->value.s, s) == 0);
 }
 
 static void
@@ -288,31 +287,33 @@ demarshal(struct marshal_data *data, const char *format,
        object.id = msg[0];
        closure = wl_connection_demarshal(data->read_connection,
                                          size, &objects, &message);
-       wl_closure_invoke(closure, &object, func, msg);
+       wl_closure_invoke(closure, &object, func, data);
 }
 
 TEST(connection_demarshal)
 {
        struct marshal_data data;
        uint32_t msg[10];
-       static const char text[] = "superdude";
 
        setup_marshal_data(&data);
 
+       data.value.u = 8000;
        msg[0] = 400200;        /* object id */
        msg[1] = 12;            /* size = 12, opcode = 0 */
-       msg[2] = 8000;
+       msg[2] = data.value.u;
        demarshal(&data, "u", msg, (void *) validate_demarshal_u);
 
+       data.value.i = -557799;
        msg[0] = 400200;
        msg[1] = 12;
-       msg[2] = -557799;
+       msg[2] = data.value.i;
        demarshal(&data, "i", msg, (void *) validate_demarshal_i);
 
+       data.value.s = "superdude";
        msg[0] = 400200;
        msg[1] = 24;
        msg[2] = 10;
-       memcpy(&msg[3], text, msg[2]);
+       memcpy(&msg[3], data.value.s, msg[2]);
        demarshal(&data, "s", msg, (void *) validate_demarshal_s);
 
        release_marshal_data(&data);
@@ -352,7 +353,7 @@ marshal_demarshal(struct marshal_data *data,
        object.id = msg[0];
        closure = wl_connection_demarshal(data->read_connection,
                                          size, &objects, &message);
-       wl_closure_invoke(closure, &object, func, msg);
+       wl_closure_invoke(closure, &object, func, data);
 
        wl_closure_destroy(closure);
 }
@@ -363,8 +364,9 @@ TEST(connection_marshal_demarshal)
 
        setup_marshal_data(&data);
 
-       marshal_demarshal(&data, (void *) validate_demarshal_s, 24,
-                         "s", "superdude");
+       data.value.s = "cookie robots";
+       marshal_demarshal(&data, (void *) validate_demarshal_s,
+                         28, "s", data.value.s);
 
        release_marshal_data(&data);
 }