Index: testing/multiprocess_func_list.h |
=================================================================== |
--- testing/multiprocess_func_list.h (revision 0) |
+++ testing/multiprocess_func_list.h (revision 0) |
@@ -0,0 +1,57 @@ |
+// Copyright (c) 2008 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef TESTING_MULTIPROCESS_FUNC_LIST_H_ |
+#define TESTING_MULTIPROCESS_FUNC_LIST_H_ |
+ |
+#include <string> |
+ |
+// This file provides the plumbing to register functions to be executed |
+// as the main function of a child process in a multi-process test. |
+// This complements the MultiProcessTest class which provides facilities |
+// for launching such tests. |
+// |
+// The MULTIPROCESS_TEST_MAIN() macro registers a string -> func_ptr mapping |
+// by creating a new global instance of the AppendMultiProcessTest() class |
+// this means that by the time that we reach our main() function the mapping |
+// is already in place. |
+// |
+// Example usage: |
+// MULTIPROCESS_TEST_MAIN(a_test_func) { |
+// // Code here runs in a child process. |
+// return 0; |
+// } |
+// |
+// The prototype of a_test_func is implicitly |
+// int test_main_func_name(); |
+ |
+namespace multi_process_function_list { |
+ |
+// Type for child process main functions. |
+typedef int (*ChildFunctionPtr)(); |
+ |
+// 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); |
+}; |
+ |
+// Invoke the main function of a test previously registered with |
+// MULTIPROCESS_TEST_MAIN() |
+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) \ |
+ int test_main(); \ |
+ namespace { \ |
+ multi_process_function_list::AppendMultiProcessTest \ |
+ AddMultiProcessTest##_##test_main(#test_main, (test_main)); \ |
+ } \ |
+ int test_main() |
+ |
+} // namespace multi_process_function_list |
+ |
+#endif // TESTING_MULTIPROCESS_FUNC_LIST_H_ |