diff options
-rw-r--r-- | src/gtest-internal-inl.h | 8 | ||||
-rw-r--r-- | src/gtest.cc | 4 | ||||
-rw-r--r-- | test/gtest_environment_test.cc | 5 | ||||
-rw-r--r-- | test/gtest_no_test_unittest.cc | 11 |
4 files changed, 21 insertions, 7 deletions
diff --git a/src/gtest-internal-inl.h b/src/gtest-internal-inl.h index 9e63aed7..c5608c99 100644 --- a/src/gtest-internal-inl.h +++ b/src/gtest-internal-inl.h @@ -754,9 +754,13 @@ class GTEST_API_ UnitTestImpl { // doesn't apply there.) int RunAllTests(); - // Clears the results of all tests, including the ad hoc test. - void ClearResult() { + // Clears the results of all tests, except the ad hoc tests. + void ClearNonAdHocTestResult() { ForEach(test_cases_, TestCase::ClearTestCaseResult); + } + + // Clears the results of ad-hoc test assertions. + void ClearAdHocTestResult() { ad_hoc_test_result_.Clear(); } diff --git a/src/gtest.cc b/src/gtest.cc index e136a18b..cb2c34c7 100644 --- a/src/gtest.cc +++ b/src/gtest.cc @@ -3999,7 +3999,9 @@ int UnitTestImpl::RunAllTests() { // Repeats forever if the repeat count is negative. const bool forever = repeat < 0; for (int i = 0; forever || i != repeat; i++) { - ClearResult(); + // We want to preserve failures generated by ad-hoc test + // assertions executed before RUN_ALL_TESTS(). + ClearNonAdHocTestResult(); const TimeInMillis start = GetTimeInMillis(); diff --git a/test/gtest_environment_test.cc b/test/gtest_environment_test.cc index c9392614..94ea318b 100644 --- a/test/gtest_environment_test.cc +++ b/test/gtest_environment_test.cc @@ -35,6 +35,10 @@ #include <stdio.h> #include <gtest/gtest.h> +#define GTEST_IMPLEMENTATION_ 1 // Required for the next #include. +#include "src/gtest-internal-inl.h" +#undef GTEST_IMPLEMENTATION_ + namespace testing { GTEST_DECLARE_string_(filter); } @@ -123,6 +127,7 @@ int RunAllTests(MyEnvironment* env, FailureType failure) { env->Reset(); env->set_failure_in_set_up(failure); test_was_run = false; + testing::internal::GetUnitTestImpl()->ClearAdHocTestResult(); return RUN_ALL_TESTS(); } diff --git a/test/gtest_no_test_unittest.cc b/test/gtest_no_test_unittest.cc index afe2dc0c..e09ca73a 100644 --- a/test/gtest_no_test_unittest.cc +++ b/test/gtest_no_test_unittest.cc @@ -40,15 +40,18 @@ int main(int argc, char **argv) { // An ad-hoc assertion outside of all tests. // - // This serves two purposes: + // This serves three purposes: // // 1. It verifies that an ad-hoc assertion can be executed even if // no test is defined. - // 2. We had a bug where the XML output won't be generated if an + // 2. It verifies that a failed ad-hoc assertion causes the test + // program to fail. + // 3. We had a bug where the XML output won't be generated if an // assertion is executed before RUN_ALL_TESTS() is called, even // though --gtest_output=xml is specified. This makes sure the // bug is fixed and doesn't regress. - EXPECT_EQ(1, 1); + EXPECT_EQ(1, 2); - return RUN_ALL_TESTS(); + // The above EXPECT_EQ() should cause RUN_ALL_TESTS() to return non-zero. + return RUN_ALL_TESTS() ? 0 : 1; } |