From 64a9c4f697a2588bbcfb20534b8b15b823595d1f Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Thu, 12 Mar 2015 22:16:03 -0700 Subject: [PATCH] Make gtest_main exit 1 when some test are failed. This is the gtest behavior, which I think can make test status judgement more convenient. Change-Id: I7d3c210d1744b954a4148cd905dd5c353207fce8 --- tests/gtest_main.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tests/gtest_main.cpp b/tests/gtest_main.cpp index b1953fc29..bf2b69578 100644 --- a/tests/gtest_main.cpp +++ b/tests/gtest_main.cpp @@ -741,7 +741,8 @@ static void CollectChildTestResult(const ChildProcInfo& child_proc, TestCase& te // We choose to use multi-fork and multi-wait here instead of multi-thread, because it always // makes deadlock to use fork in multi-thread. -static void RunTestInSeparateProc(int argc, char** argv, std::vector& testcase_list, +// Returns true if all tests run successfully, otherwise return false. +static bool RunTestInSeparateProc(int argc, char** argv, std::vector& testcase_list, size_t iteration_count, size_t job_count, const std::string& xml_output_filename) { // Stop default result printer to avoid environment setup/teardown information for each test. @@ -759,6 +760,8 @@ static void RunTestInSeparateProc(int argc, char** argv, std::vector& exit(1); } + bool all_tests_passed = true; + for (size_t iteration = 1; iteration <= iteration_count; ++iteration) { OnTestIterationStartPrint(testcase_list, iteration, iteration_count); int64_t iteration_start_time_ns = NanoTime(); @@ -806,6 +809,9 @@ static void RunTestInSeparateProc(int argc, char** argv, std::vector& if (++finished_test_count_list[testcase_id] == testcase.TestCount()) { ++finished_testcase_count; } + if (testcase.GetTestResult(test_id) != TEST_SUCCESS) { + all_tests_passed = false; + } it = child_proc_list.erase(it); } else { @@ -827,6 +833,8 @@ static void RunTestInSeparateProc(int argc, char** argv, std::vector& perror("sigprocmask SIG_SETMASK"); exit(1); } + + return all_tests_passed; } static size_t GetProcessorCount() { @@ -1061,15 +1069,15 @@ int main(int argc, char** argv) { if (EnumerateTests(argc, arg_list.data(), testcase_list) == false) { return 1; } - RunTestInSeparateProc(argc, arg_list.data(), testcase_list, options.gtest_repeat, - options.job_count, options.gtest_output); + bool all_test_passed = RunTestInSeparateProc(argc, arg_list.data(), testcase_list, + options.gtest_repeat, options.job_count, options.gtest_output); + return all_test_passed ? 0 : 1; } else { argc = static_cast(arg_list.size()); arg_list.push_back(NULL); testing::InitGoogleTest(&argc, arg_list.data()); return RUN_ALL_TESTS(); } - return 0; } //################################################################################