Makes gtest report failures in ad hoc test assertions executed before RUN_ALL_TESTS().

This commit is contained in:
zhanyong.wan 2010-06-16 22:47:13 +00:00
parent 985a30360c
commit 682c89f755
4 changed files with 21 additions and 7 deletions

View File

@ -754,9 +754,13 @@ class GTEST_API_ UnitTestImpl {
// doesn't apply there.) // doesn't apply there.)
int RunAllTests(); int RunAllTests();
// Clears the results of all tests, including the ad hoc test. // Clears the results of all tests, except the ad hoc tests.
void ClearResult() { void ClearNonAdHocTestResult() {
ForEach(test_cases_, TestCase::ClearTestCaseResult); ForEach(test_cases_, TestCase::ClearTestCaseResult);
}
// Clears the results of ad-hoc test assertions.
void ClearAdHocTestResult() {
ad_hoc_test_result_.Clear(); ad_hoc_test_result_.Clear();
} }

View File

@ -3999,7 +3999,9 @@ int UnitTestImpl::RunAllTests() {
// Repeats forever if the repeat count is negative. // Repeats forever if the repeat count is negative.
const bool forever = repeat < 0; const bool forever = repeat < 0;
for (int i = 0; forever || i != repeat; i++) { 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(); const TimeInMillis start = GetTimeInMillis();

View File

@ -35,6 +35,10 @@
#include <stdio.h> #include <stdio.h>
#include <gtest/gtest.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 { namespace testing {
GTEST_DECLARE_string_(filter); GTEST_DECLARE_string_(filter);
} }
@ -123,6 +127,7 @@ int RunAllTests(MyEnvironment* env, FailureType failure) {
env->Reset(); env->Reset();
env->set_failure_in_set_up(failure); env->set_failure_in_set_up(failure);
test_was_run = false; test_was_run = false;
testing::internal::GetUnitTestImpl()->ClearAdHocTestResult();
return RUN_ALL_TESTS(); return RUN_ALL_TESTS();
} }

View File

@ -40,15 +40,18 @@ int main(int argc, char **argv) {
// An ad-hoc assertion outside of all tests. // 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 // 1. It verifies that an ad-hoc assertion can be executed even if
// no test is defined. // 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 // assertion is executed before RUN_ALL_TESTS() is called, even
// though --gtest_output=xml is specified. This makes sure the // though --gtest_output=xml is specified. This makes sure the
// bug is fixed and doesn't regress. // 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;
} }