Index: testing/multiprocess_func_list.cc |
diff --git a/testing/multiprocess_func_list.cc b/testing/multiprocess_func_list.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a40055744555ca35cf988a28e79bfb7ef47186a0 |
--- /dev/null |
+++ b/testing/multiprocess_func_list.cc |
@@ -0,0 +1,55 @@ |
+// Copyright (c) 2012 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. |
+ |
+#include "multiprocess_func_list.h" |
+ |
+#include <map> |
+ |
+// Helper functions to maintain mapping of "test name"->test func. |
+// The information is accessed via a global map. |
+namespace multi_process_function_list { |
+ |
+namespace { |
+ |
+struct ProcessFunctions { |
+ ProcessFunctions() : main(NULL), setup(NULL) {} |
+ ProcessFunctions(TestMainFunctionPtr main, SetupFunctionPtr setup) |
+ : main(main), setup(setup) {} |
+ TestMainFunctionPtr main; |
+ SetupFunctionPtr setup; |
+}; |
+ |
+typedef std::map<std::string, ProcessFunctions> MultiProcessTestMap; |
+ |
+// Retrieve a reference to the global 'func name' -> func ptr map. |
+MultiProcessTestMap& GetMultiprocessFuncMap() { |
+ static MultiProcessTestMap test_name_to_func_ptr_map; |
+ return test_name_to_func_ptr_map; |
+} |
+ |
+} // namespace |
+ |
+AppendMultiProcessTest::AppendMultiProcessTest( |
+ std::string test_name, |
+ TestMainFunctionPtr main_func_ptr, |
+ SetupFunctionPtr setup_func_ptr) { |
+ GetMultiprocessFuncMap()[test_name] = |
+ ProcessFunctions(main_func_ptr, setup_func_ptr); |
+} |
+ |
+int InvokeChildProcessTest(std::string test_name) { |
+ MultiProcessTestMap& func_lookup_table = GetMultiprocessFuncMap(); |
+ MultiProcessTestMap::iterator it = func_lookup_table.find(test_name); |
+ if (it != func_lookup_table.end()) { |
+ const ProcessFunctions& process_functions = it->second; |
+ if (process_functions.setup) |
+ (*process_functions.setup)(); |
+ if (process_functions.main) |
+ return (*process_functions.main)(); |
+ } |
+ |
+ return -1; |
+} |
+ |
+} // namespace multi_process_function_list |