1cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// Copyright 2008 Google Inc. 2cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// All Rights Reserved. 3cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// 4cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// Redistribution and use in source and binary forms, with or without 5cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// modification, are permitted provided that the following conditions are 6cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// met: 7cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// 8cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// * Redistributions of source code must retain the above copyright 9cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// notice, this list of conditions and the following disclaimer. 10cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// * Redistributions in binary form must reproduce the above 11cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// copyright notice, this list of conditions and the following disclaimer 12cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// in the documentation and/or other materials provided with the 13cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// distribution. 14cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// * Neither the name of Google Inc. nor the names of its 15cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// contributors may be used to endorse or promote products derived from 16cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// this software without specific prior written permission. 17cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// 18cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// 30e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Author: mheule@google.com (Markus Heule) 31cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan// 32e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 332620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest-test-part.h" 34e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 352620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest.h" 36e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 3708e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wanusing testing::Message; 38e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianusing testing::Test; 39e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianusing testing::TestPartResult; 40e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianusing testing::TestPartResultArray; 41e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 42e44602ec83c65102035ce5304ae8de0cb16e9e56shiqiannamespace { 43e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 44e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests the TestPartResult class. 45e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 46e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// The test fixture for testing TestPartResult. 47e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianclass TestPartResultTest : public Test { 48e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian protected: 49e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultTest() 50334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan : r1_(TestPartResult::kSuccess, "foo/bar.cc", 10, "Success!"), 51334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan r2_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure!"), 52334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan r3_(TestPartResult::kFatalFailure, NULL, -1, "Failure!") {} 53e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 54e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResult r1_, r2_, r3_; 55e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian}; 56e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 5708e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 5808e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wanTEST_F(TestPartResultTest, ConstructorWorks) { 5908e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan Message message; 6008e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan message << "something is terribly wrong"; 6108e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan message << static_cast<const char*>(testing::internal::kStackTraceMarker); 6208e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan message << "some unimportant stack trace"; 6308e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 6408e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan const TestPartResult result(TestPartResult::kNonFatalFailure, 6508e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan "some_file.cc", 6608e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 42, 6708e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan message.GetString().c_str()); 6808e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 6908e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_EQ(TestPartResult::kNonFatalFailure, result.type()); 7008e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_STREQ("some_file.cc", result.file_name()); 7108e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_EQ(42, result.line_number()); 7208e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_STREQ(message.GetString().c_str(), result.message()); 7308e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_STREQ("something is terribly wrong", result.summary()); 7408e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan} 7508e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 7608e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wanTEST_F(TestPartResultTest, ResultAccessorsWork) { 7708e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan const TestPartResult success(TestPartResult::kSuccess, 7808e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan "file.cc", 7908e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 42, 8008e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan "message"); 8108e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_TRUE(success.passed()); 8208e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_FALSE(success.failed()); 8308e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_FALSE(success.nonfatally_failed()); 8408e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_FALSE(success.fatally_failed()); 8508e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 8608e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan const TestPartResult nonfatal_failure(TestPartResult::kNonFatalFailure, 8708e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan "file.cc", 8808e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 42, 8908e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan "message"); 9008e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_FALSE(nonfatal_failure.passed()); 9108e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_TRUE(nonfatal_failure.failed()); 9208e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_TRUE(nonfatal_failure.nonfatally_failed()); 9308e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_FALSE(nonfatal_failure.fatally_failed()); 9408e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 9508e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan const TestPartResult fatal_failure(TestPartResult::kFatalFailure, 9608e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan "file.cc", 9708e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 42, 9808e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan "message"); 9908e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_FALSE(fatal_failure.passed()); 10008e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_TRUE(fatal_failure.failed()); 10108e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_FALSE(fatal_failure.nonfatally_failed()); 10208e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan EXPECT_TRUE(fatal_failure.fatally_failed()); 10308e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan} 10408e43ce3fa6547893498d3dc4cfbfae478ce3c37zhanyong.wan 105e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests TestPartResult::type(). 106e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultTest, type) { 107334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan EXPECT_EQ(TestPartResult::kSuccess, r1_.type()); 108334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan EXPECT_EQ(TestPartResult::kNonFatalFailure, r2_.type()); 109334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan EXPECT_EQ(TestPartResult::kFatalFailure, r3_.type()); 110e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 111e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 112e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests TestPartResult::file_name(). 113e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultTest, file_name) { 114e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_STREQ("foo/bar.cc", r1_.file_name()); 115e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_STREQ(NULL, r3_.file_name()); 116e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 117e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 118e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests TestPartResult::line_number(). 119e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultTest, line_number) { 120e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_EQ(10, r1_.line_number()); 121e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_EQ(-1, r2_.line_number()); 122e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 123e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 124e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests TestPartResult::message(). 125e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultTest, message) { 126e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_STREQ("Success!", r1_.message()); 127e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 128e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 129e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests TestPartResult::passed(). 130e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultTest, Passed) { 131e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(r1_.passed()); 132e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(r2_.passed()); 133e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(r3_.passed()); 134e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 135e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 136e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests TestPartResult::failed(). 137e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultTest, Failed) { 138e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(r1_.failed()); 139e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(r2_.failed()); 140e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(r3_.failed()); 141e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 142e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 143e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests TestPartResult::fatally_failed(). 144e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultTest, FatallyFailed) { 145e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(r1_.fatally_failed()); 146e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(r2_.fatally_failed()); 147e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(r3_.fatally_failed()); 148e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 149e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 150e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests TestPartResult::nonfatally_failed(). 151e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultTest, NonfatallyFailed) { 152e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(r1_.nonfatally_failed()); 153e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_TRUE(r2_.nonfatally_failed()); 154e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FALSE(r3_.nonfatally_failed()); 155e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 156e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 157e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests the TestPartResultArray class. 158e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 159e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianclass TestPartResultArrayTest : public Test { 160e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian protected: 161e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArrayTest() 162334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan : r1_(TestPartResult::kNonFatalFailure, "foo/bar.cc", -1, "Failure 1"), 163334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan r2_(TestPartResult::kFatalFailure, "foo/bar.cc", -1, "Failure 2") {} 164e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 165e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian const TestPartResult r1_, r2_; 166e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian}; 167e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 168e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests that TestPartResultArray initially has size 0. 169e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultArrayTest, InitialSizeIsZero) { 170e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray results; 171e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_EQ(0, results.size()); 172e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 173e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 174e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests that TestPartResultArray contains the given TestPartResult 175e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// after one Append() operation. 176e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultArrayTest, ContainsGivenResultAfterAppend) { 177e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray results; 178e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian results.Append(r1_); 179e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_EQ(1, results.size()); 180e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_STREQ("Failure 1", results.GetTestPartResult(0).message()); 181e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 182e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 183e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests that TestPartResultArray contains the given TestPartResults 184e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// after two Append() operations. 185e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultArrayTest, ContainsGivenResultsAfterTwoAppends) { 186e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray results; 187e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian results.Append(r1_); 188e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian results.Append(r2_); 189e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_EQ(2, results.size()); 190e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_STREQ("Failure 1", results.GetTestPartResult(0).message()); 191e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_STREQ("Failure 2", results.GetTestPartResult(1).message()); 192e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 193e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 194e44602ec83c65102035ce5304ae8de0cb16e9e56shiqiantypedef TestPartResultArrayTest TestPartResultArrayDeathTest; 195e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 196e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests that the program dies when GetTestPartResult() is called with 197e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// an invalid index. 198e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(TestPartResultArrayDeathTest, DiesWhenIndexIsOutOfBound) { 199e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray results; 200e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian results.Append(r1_); 201e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 202d541f0259d2f6857df769f581363f84e8c4b2899zhanyong.wan EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(-1), ""); 203d541f0259d2f6857df769f581363f84e8c4b2899zhanyong.wan EXPECT_DEATH_IF_SUPPORTED(results.GetTestPartResult(1), ""); 204e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 205e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 206e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// TODO(mheule@google.com): Add a test for the class HasNewFatalFailureHelper. 207e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 208e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} // namespace 209