// Copyright 2012 The Chromium Authors // 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. TestMainFunctionPtr; // Type for child setup functions. SetupFunctionPtr; // Helper class to append a test function to the global mapping. // Used by the MULTIPROCESS_TEST_MAIN macro. class AppendMultiProcessTest { … }; ChildProcessTestRunner; void SetChildProcessTestRunner(ChildProcessTestRunner runner); // Invokes the ChildProcessTestRunner callback with `test_name` if the callback // is not null. Otherwise invokes test associated main function previously // registered with MULTIPROCESS_TEST_MAIN(). int InvokeChildProcessTest(const std::string& test_name); // Invokes a the main function of a test previously registered with // MULTIPROCESS_TEST_MAIN(). int InvokeChildProcessTestMain(const 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) … // 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) … } // namespace multi_process_function_list #endif // TESTING_MULTIPROCESS_FUNC_LIST_H_