Index: testing/multiprocess_func_list.h |
diff --git a/testing/multiprocess_func_list.h b/testing/multiprocess_func_list.h |
index 6ba84954feec0ef31ba6d767e062ae92c4bb2f5f..984e96f7e968d5dcea37351e4169c93cd2308da7 100644 |
--- a/testing/multiprocess_func_list.h |
+++ b/testing/multiprocess_func_list.h |
@@ -29,13 +29,20 @@ |
namespace multi_process_function_list { |
// Type for child process main functions. |
-typedef int (*ChildFunctionPtr)(); |
+typedef int (*TestMainFunctionPtr)(); |
+ |
+// Type for child setup functions. |
+typedef void (*SetupFunctionPtr)(); |
// Helper class to append a test function to the global mapping. |
// Used by the MULTIPROCESS_TEST_MAIN macro. |
class AppendMultiProcessTest { |
public: |
- AppendMultiProcessTest(std::string test_name, ChildFunctionPtr func_ptr); |
+ // |main_func_ptr| is the main function that is run in the child process. |
+ // |setup_func_ptr| is a function run when the global mapping is added. |
+ AppendMultiProcessTest(std::string test_name, |
+ TestMainFunctionPtr main_func_ptr, |
+ SetupFunctionPtr setup_func_ptr); |
}; |
// Invoke the main function of a test previously registered with |
@@ -45,10 +52,16 @@ int InvokeChildProcessTest(std::string test_name); |
// This macro creates a global MultiProcessTest::AppendMultiProcessTest object |
// whose constructor does the work of adding the global mapping. |
#define MULTIPROCESS_TEST_MAIN(test_main) \ |
+ MULTIPROCESS_TEST_MAIN_WITH_SETUP(test_main, NULL) |
+ |
+// Same as above but lets callers specify a setup method that is run in the |
+// child process, just before the main function is run. This facilitates |
+// adding a generic one-time setup function for multiple tests. |
+#define MULTIPROCESS_TEST_MAIN_WITH_SETUP(test_main, test_setup) \ |
int test_main(); \ |
namespace { \ |
multi_process_function_list::AppendMultiProcessTest \ |
- AddMultiProcessTest##_##test_main(#test_main, (test_main)); \ |
+ AddMultiProcessTest##_##test_main(#test_main, (test_main), (test_setup)); \ |
} \ |
int test_main() |