17ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Copyright 2008, Google Inc. 27ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// All rights reserved. 37ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 47ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Redistribution and use in source and binary forms, with or without 57ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// modification, are permitted provided that the following conditions are 67ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// met: 77ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 87ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Redistributions of source code must retain the above copyright 97ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// notice, this list of conditions and the following disclaimer. 107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Redistributions in binary form must reproduce the above 117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// copyright notice, this list of conditions and the following disclaimer 127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// in the documentation and/or other materials provided with the 137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// distribution. 147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Neither the name of Google Inc. nor the names of its 157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// contributors may be used to endorse or promote products derived from 167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this software without specific prior written permission. 177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Author: mheule@google.com (Markus Heule) 317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The Google C++ Testing Framework (Google Test) 337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 34b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest-test-part.h" 357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Indicates that this translation unit is part of Google Test's 377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// implementation. It must come before gtest-internal-inl.h is 387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// included, or there will be a compiler error. This trick is to 397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// prevent a user from accidentally including gtest-internal-inl.h in 407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// his code. 41e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#define GTEST_IMPLEMENTATION_ 1 42efbdf7f2320649512569143611f53177c27ba9f6Chandler Carruth#include "src/gtest-internal-inl.h" 43e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#undef GTEST_IMPLEMENTATION_ 447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace testing { 467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 47190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerusing internal::GetUnitTestImpl; 48190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Gets the summary of the failure message by omitting the stack trace 507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// in it. 517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmaninternal::String TestPartResult::ExtractSummary(const char* message) { 527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* const stack_trace = strstr(message, internal::kStackTraceMarker); 537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return stack_trace == NULL ? internal::String(message) : 547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::String(message, stack_trace - message); 557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Prints a TestPartResult object. 587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanstd::ostream& operator<<(std::ostream& os, const TestPartResult& result) { 59190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer return os 60190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer << result.file_name() << ":" << result.line_number() << ": " 61190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer << (result.type() == TestPartResult::kSuccess ? "Success" : 62190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer result.type() == TestPartResult::kFatalFailure ? "Fatal failure" : 63190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer "Non-fatal failure") << ":\n" 64190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer << result.message() << std::endl; 657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Appends a TestPartResult to the array. 687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanvoid TestPartResultArray::Append(const TestPartResult& result) { 6957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer array_.push_back(result); 707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Returns the TestPartResult at the given index (0-based). 737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanconst TestPartResult& TestPartResultArray::GetTestPartResult(int index) const { 747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (index < 0 || index >= size()) { 757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman printf("\nInvalid index (%d) into TestPartResultArray.\n", index); 76190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::posix::Abort(); 777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 7957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return array_[index]; 807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Returns the number of TestPartResult objects in the array. 837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanint TestPartResultArray::size() const { 8457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return static_cast<int>(array_.size()); 857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal { 887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanHasNewFatalFailureHelper::HasNewFatalFailureHelper() 907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman : has_new_fatal_failure_(false), 91190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer original_reporter_(GetUnitTestImpl()-> 927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GetTestPartResultReporterForCurrentThread()) { 93190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this); 947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanHasNewFatalFailureHelper::~HasNewFatalFailureHelper() { 97190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread( 987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman original_reporter_); 997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 1007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanvoid HasNewFatalFailureHelper::ReportTestPartResult( 1027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const TestPartResult& result) { 1037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (result.fatally_failed()) 1047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman has_new_fatal_failure_ = true; 1057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman original_reporter_->ReportTestPartResult(result); 1067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 1077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace internal 1097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace testing 111