OSDN Git Service

shared: Add user data support to tester framework
authorMarcel Holtmann <marcel@holtmann.org>
Tue, 1 Jan 2013 20:14:25 +0000 (12:14 -0800)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 1 Jan 2013 20:14:25 +0000 (12:14 -0800)
src/shared/tester.c
src/shared/tester.h

index 5e7257b..5ead2e0 100644 (file)
@@ -85,6 +85,8 @@ struct test_case {
        tester_data_func_t post_teardown_func;
        gdouble start_time;
        gdouble end_time;
+       tester_destroy_func_t destroy;
+       void *user_data;
 };
 
 static GMainLoop *main_loop;
@@ -97,6 +99,9 @@ static void test_destroy(gpointer data)
 {
        struct test_case *test = data;
 
+       if (test->destroy)
+               test->destroy(test->user_data);
+
        g_free(test->name);
        g_free(test);
 }
@@ -147,11 +152,12 @@ static void default_post_teardown(const void *test_data)
 }
 
 void tester_add_full(const char *name, const void *test_data,
-                                       tester_data_func_t pre_setup_func,
-                                       tester_data_func_t setup_func,
-                                       tester_data_func_t test_func,
-                                       tester_data_func_t teardown_func,
-                                       tester_data_func_t post_teardown_func)
+                               tester_data_func_t pre_setup_func,
+                               tester_data_func_t setup_func,
+                               tester_data_func_t test_func,
+                               tester_data_func_t teardown_func,
+                               tester_data_func_t post_teardown_func,
+                               void *user_data, tester_destroy_func_t destroy)
 {
        struct test_case *test;
 
@@ -188,6 +194,9 @@ void tester_add_full(const char *name, const void *test_data,
        else
                test->post_teardown_func = default_post_teardown;
 
+       test->destroy = destroy;
+       test->user_data = user_data;
+
        test_list = g_list_append(test_list, test);
 }
 
@@ -197,7 +206,19 @@ void tester_add(const char *name, const void *test_data,
                                        tester_data_func_t teardown_func)
 {
        tester_add_full(name, test_data, NULL, setup_func, test_func,
-                                                       teardown_func, NULL);
+                                       teardown_func, NULL, NULL, NULL);
+}
+
+void *tester_get_data(void)
+{
+       struct test_case *test;
+
+       if (!test_current)
+               return NULL;
+
+       test = test_current->data;
+
+       return test->user_data;
 }
 
 static void tester_summarize(void)
index 7c23340..4c4b8ac 100644 (file)
@@ -34,19 +34,24 @@ void tester_print(const char *format, ...)
 void tester_warn(const char *format, ...)
                                __attribute__((format(printf, 1, 2)));
 
+typedef void (*tester_destroy_func_t)(void *user_data);
 typedef void (*tester_data_func_t)(const void *test_data);
 
 void tester_add_full(const char *name, const void *test_data,
-                                       tester_data_func_t pre_setup_func,
-                                       tester_data_func_t setup_func,
-                                       tester_data_func_t test_func,
-                                       tester_data_func_t teardown_func,
-                                       tester_data_func_t post_teardown_func);
+                               tester_data_func_t pre_setup_func,
+                               tester_data_func_t setup_func,
+                               tester_data_func_t test_func,
+                               tester_data_func_t teardown_func,
+                               tester_data_func_t post_teardown_func,
+                               void *user_data, tester_destroy_func_t destroy);
+
 void tester_add(const char *name, const void *test_data,
                                        tester_data_func_t setup_func,
                                        tester_data_func_t test_func,
                                        tester_data_func_t teardown_func);
 
+void *tester_get_data(void);
+
 void tester_pre_setup_complete(void);
 void tester_pre_setup_failed(void);