1e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Copyright 2008, Google Inc. 2e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// All rights reserved. 3e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// 4e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Redistribution and use in source and binary forms, with or without 5e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// modification, are permitted provided that the following conditions are 6e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// met: 7e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// 8e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// * Redistributions of source code must retain the above copyright 9e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// notice, this list of conditions and the following disclaimer. 10e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// * Redistributions in binary form must reproduce the above 11e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// copyright notice, this list of conditions and the following disclaimer 12e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// in the documentation and/or other materials provided with the 13e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// distribution. 14e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// * Neither the name of Google Inc. nor the names of its 15e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// contributors may be used to endorse or promote products derived from 16e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// this software without specific prior written permission. 17e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// 18e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// 30e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Author: mheule@google.com (Markus Heule) 31e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// 32e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// The Google C++ Testing Framework (Google Test) 33e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 342620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest-test-part.h" 35e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 36e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Indicates that this translation unit is part of Google Test's 37e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// implementation. It must come before gtest-internal-inl.h is 382f9c469cd2ac136ca4b496b8682a316ce6bf466dkosak@google.com// included, or there will be a compiler error. This trick exists to 392f9c469cd2ac136ca4b496b8682a316ce6bf466dkosak@google.com// prevent the accidental inclusion of gtest-internal-inl.h in the 402f9c469cd2ac136ca4b496b8682a316ce6bf466dkosak@google.com// user's code. 414cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#define GTEST_IMPLEMENTATION_ 1 42e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian#include "src/gtest-internal-inl.h" 434cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#undef GTEST_IMPLEMENTATION_ 44e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 45e44602ec83c65102035ce5304ae8de0cb16e9e56shiqiannamespace testing { 46e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 47a80f23f103e1a008c1df7ecc68eef9aa4ffbdc37zhanyong.wanusing internal::GetUnitTestImpl; 48a80f23f103e1a008c1df7ecc68eef9aa4ffbdc37zhanyong.wan 49e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Gets the summary of the failure message by omitting the stack trace 50e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// in it. 5103c314931649a999b0cf5deb0a434a1009157416jgm@google.comstd::string TestPartResult::ExtractSummary(const char* message) { 52e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian const char* const stack_trace = strstr(message, internal::kStackTraceMarker); 5303c314931649a999b0cf5deb0a434a1009157416jgm@google.com return stack_trace == NULL ? message : 5403c314931649a999b0cf5deb0a434a1009157416jgm@google.com std::string(message, stack_trace); 55e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 56e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 57e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Prints a TestPartResult object. 58e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianstd::ostream& operator<<(std::ostream& os, const TestPartResult& result) { 59334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan return os 60334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan << result.file_name() << ":" << result.line_number() << ": " 61334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan << (result.type() == TestPartResult::kSuccess ? "Success" : 62334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : 63334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan "Non-fatal failure") << ":\n" 64334aaead71ccf797a18f2128c320f0304e724860zhanyong.wan << result.message() << std::endl; 65e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 66e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 67e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Appends a TestPartResult to the array. 68e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianvoid TestPartResultArray::Append(const TestPartResult& result) { 6993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan array_.push_back(result); 70e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 71e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 72e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Returns the TestPartResult at the given index (0-based). 73e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianconst TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { 74e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian if (index < 0 || index >= size()) { 75e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("\nInvalid index (%d) into TestPartResultArray.\n", index); 76c7f60f1514013d57a624c3a2966709998678f24bzhanyong.wan internal::posix::Abort(); 77e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 78e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 7993d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan return array_[index]; 80e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 81e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 82e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Returns the number of TestPartResult objects in the array. 83e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianint TestPartResultArray::size() const { 84b03ca47c10be432be5d984cb91ce22c81dfa2252zhanyong.wan return static_cast<int>(array_.size()); 85e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 86e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 87e44602ec83c65102035ce5304ae8de0cb16e9e56shiqiannamespace internal { 88e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 89e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianHasNewFatalFailureHelper::HasNewFatalFailureHelper() 90e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian : has_new_fatal_failure_(false), 91a80f23f103e1a008c1df7ecc68eef9aa4ffbdc37zhanyong.wan original_reporter_(GetUnitTestImpl()-> 92e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian GetTestPartResultReporterForCurrentThread()) { 93a80f23f103e1a008c1df7ecc68eef9aa4ffbdc37zhanyong.wan GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); 94e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 95e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 96e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianHasNewFatalFailureHelper::~HasNewFatalFailureHelper() { 97a80f23f103e1a008c1df7ecc68eef9aa4ffbdc37zhanyong.wan GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( 98e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian original_reporter_); 99e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 100e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 101e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianvoid HasNewFatalFailureHelper::ReportTestPartResult( 102e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian const TestPartResult& result) { 103e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian if (result.fatally_failed()) 104e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian has_new_fatal_failure_ = true; 105e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian original_reporter_->ReportTestPartResult(result); 106e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 107e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 108e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} // namespace internal 109e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 110e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} // namespace testing 111