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.)
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();
}

View File

@ -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();

View File

@ -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();
}

View File

@ -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;
}