diff options
author | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-29 20:46:04 +0000 |
---|---|---|
committer | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-29 20:46:04 +0000 |
commit | 307f536386aad3abf7c0978b892ffac059eb0be5 (patch) | |
tree | 9e59dd49ecdd90a63e007c37bdd27cc045549138 /testing/multiprocess_func_list.h | |
parent | fcbaeacfce08303236709e2603e64fc40bdba435 (diff) | |
download | chromium_src-307f536386aad3abf7c0978b892ffac059eb0be5.zip chromium_src-307f536386aad3abf7c0978b892ffac059eb0be5.tar.gz chromium_src-307f536386aad3abf7c0978b892ffac059eb0be5.tar.bz2 |
1) Add a new MULTIPROCESS_TEST_MAIN macro to store child process names
in a lookup table.
Previously we were using different mechanisms on each platform to look up
child process names at runtime. This broke on OS X where we strip the symbol
table on release executables.
2) Enable process_util_unittest on OS X.
Review URL: http://codereview.chromium.org/8864
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4165 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'testing/multiprocess_func_list.h')
-rw-r--r-- | testing/multiprocess_func_list.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/testing/multiprocess_func_list.h b/testing/multiprocess_func_list.h new file mode 100644 index 0000000..0d53b2b --- /dev/null +++ b/testing/multiprocess_func_list.h @@ -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_ |