1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2008, Google Inc. 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// All rights reserved. 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met: 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions of source code must retain the above copyright 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer. 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions in binary form must reproduce the above 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution. 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Neither the name of Google Inc. nor the names of its 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission. 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Author: mheule@google.com (Markus Heule) 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// The Google C++ Testing Framework (Google Test) 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <gtest/gtest-test-part.h> 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Indicates that this translation unit is part of Google Test's 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// implementation. It must come before gtest-internal-inl.h is 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// included, or there will be a compiler error. This trick is to 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// prevent a user from accidentally including gtest-internal-inl.h in 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// his code. 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#define GTEST_IMPLEMENTATION_ 1 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include "src/gtest-internal-inl.h" 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#undef GTEST_IMPLEMENTATION_ 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace testing { 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing internal::GetUnitTestImpl; 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Gets the summary of the failure message by omitting the stack trace 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in it. 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleinternal::String TestPartResult::ExtractSummary(const char* message) { 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const char* const stack_trace = strstr(message, internal::kStackTraceMarker); 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return stack_trace == NULL ? internal::String(message) : 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville internal::String(message, stack_trace - message); 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Prints a TestPartResult object. 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillestd::ostream& operator<<(std::ostream& os, const TestPartResult& result) { 59d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville return os 60d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville << result.file_name() << ":" << result.line_number() << ": " 61d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville << (result.type() == TestPartResult::kSuccess ? "Success" : 62d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : 63d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville "Non-fatal failure") << ":\n" 64d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville << result.message() << std::endl; 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Constructs an empty TestPartResultArray. 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTestPartResultArray::TestPartResultArray() 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville : array_(new internal::Vector<TestPartResult>) { 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Destructs a TestPartResultArray. 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleTestPartResultArray::~TestPartResultArray() { 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville delete array_; 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Appends a TestPartResult to the array. 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid TestPartResultArray::Append(const TestPartResult& result) { 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville array_->PushBack(result); 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Returns the TestPartResult at the given index (0-based). 83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleconst TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { 84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (index < 0 || index >= size()) { 85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville printf("\nInvalid index (%d) into TestPartResultArray.\n", index); 86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville internal::posix::Abort(); 87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return array_->GetElement(index); 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Returns the number of TestPartResult objects in the array. 93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleint TestPartResultArray::size() const { 94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return array_->size(); 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace internal { 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleHasNewFatalFailureHelper::HasNewFatalFailureHelper() 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville : has_new_fatal_failure_(false), 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville original_reporter_(GetUnitTestImpl()-> 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville GetTestPartResultReporterForCurrentThread()) { 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); 104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleHasNewFatalFailureHelper::~HasNewFatalFailureHelper() { 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville original_reporter_); 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid HasNewFatalFailureHelper::ReportTestPartResult( 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const TestPartResult& result) { 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville if (result.fatally_failed()) 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville has_new_fatal_failure_ = true; 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville original_reporter_->ReportTestPartResult(result); 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace internal 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace testing 121