diff options
author | jcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-27 01:12:24 +0000 |
---|---|---|
committer | jcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-27 01:12:24 +0000 |
commit | 97c652b98f92e060e3ed3a11d2c808d85a7e1c1c (patch) | |
tree | 869d2ba677905ea0cba67f4ee311d15846f97790 /testing | |
parent | 31ad4a24b884526a51f81efa556c019dcc27657d (diff) | |
download | chromium_src-97c652b98f92e060e3ed3a11d2c808d85a7e1c1c.zip chromium_src-97c652b98f92e060e3ed3a11d2c808d85a7e1c1c.tar.gz chromium_src-97c652b98f92e060e3ed3a11d2c808d85a7e1c1c.tar.bz2 |
Make GlobalDescriptors::MaybeGet return -1 when the key is not found.
BUG=None
TEST=Unit tests should still pass.
Review URL: https://chromiumcodereview.appspot.com/10387218
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@144350 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'testing')
-rw-r--r-- | testing/multiprocess_func_list.cc | 36 | ||||
-rw-r--r-- | testing/multiprocess_func_list.h | 21 |
2 files changed, 42 insertions, 15 deletions
diff --git a/testing/multiprocess_func_list.cc b/testing/multiprocess_func_list.cc index 1e19704..49ae07d 100644 --- a/testing/multiprocess_func_list.cc +++ b/testing/multiprocess_func_list.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2008 The Chromium Authors. All rights reserved. +// 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. @@ -12,29 +12,43 @@ namespace multi_process_function_list { namespace { -typedef std::map<std::string, ChildFunctionPtr> MultiProcessTestMap; +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() { +MultiProcessTestMap& GetMultiprocessFuncMap() { static MultiProcessTestMap test_name_to_func_ptr_map; return test_name_to_func_ptr_map; } } // namespace -AppendMultiProcessTest::AppendMultiProcessTest(std::string test_name, - ChildFunctionPtr func_ptr) { - GetMultiprocessFuncMap()[test_name] = func_ptr; +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& func_lookup_table = GetMultiprocessFuncMap(); MultiProcessTestMap::iterator it = func_lookup_table.find(test_name); if (it != func_lookup_table.end()) { - ChildFunctionPtr func = it->second; - if (func) { - return (*func)(); - } + const ProcessFunctions& process_functions = it->second; + if (process_functions.setup) + (*process_functions.setup)(); + if (process_functions.main) + return (*process_functions.main)(); } return -1; diff --git a/testing/multiprocess_func_list.h b/testing/multiprocess_func_list.h index 6ba8495..f806d53 100644 --- a/testing/multiprocess_func_list.h +++ b/testing/multiprocess_func_list.h @@ -1,4 +1,4 @@ -// Copyright (c) 2008 The Chromium Authors. All rights reserved. +// 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. @@ -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() |