58 lines
1.7 KiB
C++
58 lines
1.7 KiB
C++
// 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
|