|
|
|
@ -128,6 +128,10 @@ |
|
|
|
|
// Low-level types and utilities for porting Google Test to various
|
|
|
|
|
// platforms. They are subject to change without notice. DO NOT USE
|
|
|
|
|
// THEM IN USER CODE.
|
|
|
|
|
//
|
|
|
|
|
// This file is fundamental to Google Test. All other Google Test source
|
|
|
|
|
// files are expected to #include this. Therefore, it cannot #include
|
|
|
|
|
// any other Google Test header.
|
|
|
|
|
|
|
|
|
|
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ |
|
|
|
|
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ |
|
|
|
@ -1942,6 +1946,11 @@ class Message; |
|
|
|
|
|
|
|
|
|
namespace internal { |
|
|
|
|
|
|
|
|
|
// A secret type that Google Test users don't know about. It has no
|
|
|
|
|
// definition on purpose. Therefore it's impossible to create a
|
|
|
|
|
// Secret object, which is what we want.
|
|
|
|
|
class Secret; |
|
|
|
|
|
|
|
|
|
// The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time
|
|
|
|
|
// expression is true. For example, you could use it to verify the
|
|
|
|
|
// size of a static array:
|
|
|
|
@ -1962,8 +1971,8 @@ struct CompileAssert { |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#define GTEST_COMPILE_ASSERT_(expr, msg) \ |
|
|
|
|
typedef ::testing::internal::CompileAssert<(bool(expr))> \
|
|
|
|
|
msg[bool(expr) ? 1 : -1] |
|
|
|
|
typedef ::testing::internal::CompileAssert<(static_cast<bool>(expr))> \
|
|
|
|
|
msg[static_cast<bool>(expr) ? 1 : -1] GTEST_ATTRIBUTE_UNUSED_ |
|
|
|
|
|
|
|
|
|
// Implementation details of GTEST_COMPILE_ASSERT_:
|
|
|
|
|
//
|
|
|
|
@ -3102,12 +3111,265 @@ const char* StringFromGTestEnv(const char* flag, const char* default_val); |
|
|
|
|
# include <unistd.h> |
|
|
|
|
#endif // GTEST_OS_LINUX
|
|
|
|
|
|
|
|
|
|
#if GTEST_HAS_EXCEPTIONS |
|
|
|
|
# include <stdexcept> |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#include <ctype.h> |
|
|
|
|
#include <string.h> |
|
|
|
|
#include <iomanip> |
|
|
|
|
#include <limits> |
|
|
|
|
#include <set> |
|
|
|
|
|
|
|
|
|
// Copyright 2005, Google Inc.
|
|
|
|
|
// All rights reserved.
|
|
|
|
|
//
|
|
|
|
|
// Redistribution and use in source and binary forms, with or without
|
|
|
|
|
// modification, are permitted provided that the following conditions are
|
|
|
|
|
// met:
|
|
|
|
|
//
|
|
|
|
|
// * Redistributions of source code must retain the above copyright
|
|
|
|
|
// notice, this list of conditions and the following disclaimer.
|
|
|
|
|
// * Redistributions in binary form must reproduce the above
|
|
|
|
|
// copyright notice, this list of conditions and the following disclaimer
|
|
|
|
|
// in the documentation and/or other materials provided with the
|
|
|
|
|
// distribution.
|
|
|
|
|
// * Neither the name of Google Inc. nor the names of its
|
|
|
|
|
// contributors may be used to endorse or promote products derived from
|
|
|
|
|
// this software without specific prior written permission.
|
|
|
|
|
//
|
|
|
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
|
|
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
|
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
|
|
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
//
|
|
|
|
|
// Author: wan@google.com (Zhanyong Wan)
|
|
|
|
|
//
|
|
|
|
|
// The Google C++ Testing Framework (Google Test)
|
|
|
|
|
//
|
|
|
|
|
// This header file defines the Message class.
|
|
|
|
|
//
|
|
|
|
|
// IMPORTANT NOTE: Due to limitation of the C++ language, we have to
|
|
|
|
|
// leave some internal implementation details in this header file.
|
|
|
|
|
// They are clearly marked by comments like this:
|
|
|
|
|
//
|
|
|
|
|
// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
|
|
|
|
//
|
|
|
|
|
// Such code is NOT meant to be used by a user directly, and is subject
|
|
|
|
|
// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user
|
|
|
|
|
// program!
|
|
|
|
|
|
|
|
|
|
#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ |
|
|
|
|
#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ |
|
|
|
|
|
|
|
|
|
#include <limits> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Ensures that there is at least one operator<< in the global namespace.
|
|
|
|
|
// See Message& operator<<(...) below for why.
|
|
|
|
|
void operator<<(const testing::internal::Secret&, int); |
|
|
|
|
|
|
|
|
|
namespace testing { |
|
|
|
|
|
|
|
|
|
// The Message class works like an ostream repeater.
|
|
|
|
|
//
|
|
|
|
|
// Typical usage:
|
|
|
|
|
//
|
|
|
|
|
// 1. You stream a bunch of values to a Message object.
|
|
|
|
|
// It will remember the text in a stringstream.
|
|
|
|
|
// 2. Then you stream the Message object to an ostream.
|
|
|
|
|
// This causes the text in the Message to be streamed
|
|
|
|
|
// to the ostream.
|
|
|
|
|
//
|
|
|
|
|
// For example;
|
|
|
|
|
//
|
|
|
|
|
// testing::Message foo;
|
|
|
|
|
// foo << 1 << " != " << 2;
|
|
|
|
|
// std::cout << foo;
|
|
|
|
|
//
|
|
|
|
|
// will print "1 != 2".
|
|
|
|
|
//
|
|
|
|
|
// Message is not intended to be inherited from. In particular, its
|
|
|
|
|
// destructor is not virtual.
|
|
|
|
|
//
|
|
|
|
|
// Note that stringstream behaves differently in gcc and in MSVC. You
|
|
|
|
|
// can stream a NULL char pointer to it in the former, but not in the
|
|
|
|
|
// latter (it causes an access violation if you do). The Message
|
|
|
|
|
// class hides this difference by treating a NULL char pointer as
|
|
|
|
|
// "(null)".
|
|
|
|
|
class GTEST_API_ Message { |
|
|
|
|
private: |
|
|
|
|
// The type of basic IO manipulators (endl, ends, and flush) for
|
|
|
|
|
// narrow streams.
|
|
|
|
|
typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&); |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
// Constructs an empty Message.
|
|
|
|
|
Message(); |
|
|
|
|
|
|
|
|
|
// Copy constructor.
|
|
|
|
|
Message(const Message& msg) : ss_(new ::std::stringstream) { // NOLINT
|
|
|
|
|
*ss_ << msg.GetString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Constructs a Message from a C-string.
|
|
|
|
|
explicit Message(const char* str) : ss_(new ::std::stringstream) { |
|
|
|
|
*ss_ << str; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if GTEST_OS_SYMBIAN |
|
|
|
|
// Streams a value (either a pointer or not) to this object.
|
|
|
|
|
template <typename T> |
|
|
|
|
inline Message& operator <<(const T& value) { |
|
|
|
|
StreamHelper(typename internal::is_pointer<T>::type(), value); |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
// Streams a non-pointer value to this object.
|
|
|
|
|
template <typename T> |
|
|
|
|
inline Message& operator <<(const T& val) { |
|
|
|
|
// Some libraries overload << for STL containers. These
|
|
|
|
|
// overloads are defined in the global namespace instead of ::std.
|
|
|
|
|
//
|
|
|
|
|
// C++'s symbol lookup rule (i.e. Koenig lookup) says that these
|
|
|
|
|
// overloads are visible in either the std namespace or the global
|
|
|
|
|
// namespace, but not other namespaces, including the testing
|
|
|
|
|
// namespace which Google Test's Message class is in.
|
|
|
|
|
//
|
|
|
|
|
// To allow STL containers (and other types that has a << operator
|
|
|
|
|
// defined in the global namespace) to be used in Google Test
|
|
|
|
|
// assertions, testing::Message must access the custom << operator
|
|
|
|
|
// from the global namespace. With this using declaration,
|
|
|
|
|
// overloads of << defined in the global namespace and those
|
|
|
|
|
// visible via Koenig lookup are both exposed in this function.
|
|
|
|
|
using ::operator <<; |
|
|
|
|
*ss_ << val; |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Streams a pointer value to this object.
|
|
|
|
|
//
|
|
|
|
|
// This function is an overload of the previous one. When you
|
|
|
|
|
// stream a pointer to a Message, this definition will be used as it
|
|
|
|
|
// is more specialized. (The C++ Standard, section
|
|
|
|
|
// [temp.func.order].) If you stream a non-pointer, then the
|
|
|
|
|
// previous definition will be used.
|
|
|
|
|
//
|
|
|
|
|
// The reason for this overload is that streaming a NULL pointer to
|
|
|
|
|
// ostream is undefined behavior. Depending on the compiler, you
|
|
|
|
|
// may get "0", "(nil)", "(null)", or an access violation. To
|
|
|
|
|
// ensure consistent result across compilers, we always treat NULL
|
|
|
|
|
// as "(null)".
|
|
|
|
|
template <typename T> |
|
|
|
|
inline Message& operator <<(T* const& pointer) { // NOLINT
|
|
|
|
|
if (pointer == NULL) { |
|
|
|
|
*ss_ << "(null)"; |
|
|
|
|
} else { |
|
|
|
|
*ss_ << pointer; |
|
|
|
|
} |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
#endif // GTEST_OS_SYMBIAN
|
|
|
|
|
|
|
|
|
|
// Since the basic IO manipulators are overloaded for both narrow
|
|
|
|
|
// and wide streams, we have to provide this specialized definition
|
|
|
|
|
// of operator <<, even though its body is the same as the
|
|
|
|
|
// templatized version above. Without this definition, streaming
|
|
|
|
|
// endl or other basic IO manipulators to Message will confuse the
|
|
|
|
|
// compiler.
|
|
|
|
|
Message& operator <<(BasicNarrowIoManip val) { |
|
|
|
|
*ss_ << val; |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Instead of 1/0, we want to see true/false for bool values.
|
|
|
|
|
Message& operator <<(bool b) { |
|
|
|
|
return *this << (b ? "true" : "false"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// These two overloads allow streaming a wide C string to a Message
|
|
|
|
|
// using the UTF-8 encoding.
|
|
|
|
|
Message& operator <<(const wchar_t* wide_c_str); |
|
|
|
|
Message& operator <<(wchar_t* wide_c_str); |
|
|
|
|
|
|
|
|
|
#if GTEST_HAS_STD_WSTRING |
|
|
|
|
// Converts the given wide string to a narrow string using the UTF-8
|
|
|
|
|
// encoding, and streams the result to this Message object.
|
|
|
|
|
Message& operator <<(const ::std::wstring& wstr); |
|
|
|
|
#endif // GTEST_HAS_STD_WSTRING
|
|
|
|
|
|
|
|
|
|
#if GTEST_HAS_GLOBAL_WSTRING |
|
|
|
|
// Converts the given wide string to a narrow string using the UTF-8
|
|
|
|
|
// encoding, and streams the result to this Message object.
|
|
|
|
|
Message& operator <<(const ::wstring& wstr); |
|
|
|
|
#endif // GTEST_HAS_GLOBAL_WSTRING
|
|
|
|
|
|
|
|
|
|
// Gets the text streamed to this object so far as an std::string.
|
|
|
|
|
// Each '\0' character in the buffer is replaced with "\\0".
|
|
|
|
|
//
|
|
|
|
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
|
|
|
|
std::string GetString() const; |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
|
|
|
|
|
#if GTEST_OS_SYMBIAN |
|
|
|
|
// These are needed as the Nokia Symbian Compiler cannot decide between
|
|
|
|
|
// const T& and const T* in a function template. The Nokia compiler _can_
|
|
|
|
|
// decide between class template specializations for T and T*, so a
|
|
|
|
|
// tr1::type_traits-like is_pointer works, and we can overload on that.
|
|
|
|
|
template <typename T> |
|
|
|
|
inline void StreamHelper(internal::true_type /*is_pointer*/, T* pointer) { |
|
|
|
|
if (pointer == NULL) { |
|
|
|
|
*ss_ << "(null)"; |
|
|
|
|
} else { |
|
|
|
|
*ss_ << pointer; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
template <typename T> |
|
|
|
|
inline void StreamHelper(internal::false_type /*is_pointer*/, |
|
|
|
|
const T& value) { |
|
|
|
|
// See the comments in Message& operator <<(const T&) above for why
|
|
|
|
|
// we need this using statement.
|
|
|
|
|
using ::operator <<; |
|
|
|
|
*ss_ << value; |
|
|
|
|
} |
|
|
|
|
#endif // GTEST_OS_SYMBIAN
|
|
|
|
|
|
|
|
|
|
// We'll hold the text streamed to this object here.
|
|
|
|
|
const internal::scoped_ptr< ::std::stringstream> ss_; |
|
|
|
|
|
|
|
|
|
// We declare (but don't implement) this to prevent the compiler
|
|
|
|
|
// from implementing the assignment operator.
|
|
|
|
|
void operator=(const Message&); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// Streams a Message to an ostream.
|
|
|
|
|
inline std::ostream& operator <<(std::ostream& os, const Message& sb) { |
|
|
|
|
return os << sb.GetString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
namespace internal { |
|
|
|
|
|
|
|
|
|
// Converts a streamable value to an std::string. A NULL pointer is
|
|
|
|
|
// converted to "(null)". When the input value is a ::string,
|
|
|
|
|
// ::std::string, ::wstring, or ::std::wstring object, each NUL
|
|
|
|
|
// character in it is replaced with "\\0".
|
|
|
|
|
template <typename T> |
|
|
|
|
std::string StreamableToString(const T& streamable) { |
|
|
|
|
return (Message() << streamable).GetString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} // namespace internal
|
|
|
|
|
} // namespace testing
|
|
|
|
|
|
|
|
|
|
#endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
|
|
|
|
|
// Copyright 2005, Google Inc.
|
|
|
|
|
// All rights reserved.
|
|
|
|
|
//
|
|
|
|
@ -3253,16 +3515,14 @@ class GTEST_API_ String { |
|
|
|
|
static bool EndsWithCaseInsensitive( |
|
|
|
|
const std::string& str, const std::string& suffix); |
|
|
|
|
|
|
|
|
|
// Formats a list of arguments to an std::string, using the same format
|
|
|
|
|
// spec string as for printf.
|
|
|
|
|
//
|
|
|
|
|
// We do not use the StringPrintf class as it is not universally
|
|
|
|
|
// available.
|
|
|
|
|
//
|
|
|
|
|
// The result is limited to 4096 characters (including the tailing
|
|
|
|
|
// 0). If 4096 characters are not enough to format the input,
|
|
|
|
|
// "<buffer exceeded>" is returned.
|
|
|
|
|
static std::string Format(const char* format, ...); |
|
|
|
|
// Formats an int value as "%02d".
|
|
|
|
|
static std::string FormatIntWidth2(int value); // "%02d" for width == 2
|
|
|
|
|
|
|
|
|
|
// Formats an int value as "%X".
|
|
|
|
|
static std::string FormatHexInt(int value); |
|
|
|
|
|
|
|
|
|
// Formats a byte as "%02X".
|
|
|
|
|
static std::string FormatByte(unsigned char value); |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
String(); // Not meant to be instantiated.
|
|
|
|
@ -3272,17 +3532,6 @@ class GTEST_API_ String { |
|
|
|
|
// character in the buffer is replaced with "\\0".
|
|
|
|
|
GTEST_API_ std::string StringStreamToString(::std::stringstream* stream); |
|
|
|
|
|
|
|
|
|
// Converts a streamable value to an std::string. A NULL pointer is
|
|
|
|
|
// converted to "(null)". When the input value is a ::string,
|
|
|
|
|
// ::std::string, ::wstring, or ::std::wstring object, each NUL
|
|
|
|
|
// character in it is replaced with "\\0".
|
|
|
|
|
|
|
|
|
|
// Declared here but defined in gtest.h, so that it has access
|
|
|
|
|
// to the definition of the Message class, required by the ARM
|
|
|
|
|
// compiler.
|
|
|
|
|
template <typename T> |
|
|
|
|
std::string StreamableToString(const T& streamable); |
|
|
|
|
|
|
|
|
|
} // namespace internal
|
|
|
|
|
} // namespace testing
|
|
|
|
|
|
|
|
|
@ -6834,36 +7083,6 @@ struct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, |
|
|
|
|
#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) |
|
|
|
|
#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar |
|
|
|
|
|
|
|
|
|
// Google Test defines the testing::Message class to allow construction of
|
|
|
|
|
// test messages via the << operator. The idea is that anything
|
|
|
|
|
// streamable to std::ostream can be streamed to a testing::Message.
|
|
|
|
|
// This allows a user to use his own types in Google Test assertions by
|
|
|
|
|
// overloading the << operator.
|
|
|
|
|
//
|
|
|
|
|
// util/gtl/stl_logging.h overloads << for STL containers. These
|
|
|
|
|
// overloads cannot be defined in the std namespace, as that will be
|
|
|
|
|
// undefined behavior. Therefore, they are defined in the global
|
|
|
|
|
// namespace instead.
|
|
|
|
|
//
|
|
|
|
|
// C++'s symbol lookup rule (i.e. Koenig lookup) says that these
|
|
|
|
|
// overloads are visible in either the std namespace or the global
|
|
|
|
|
// namespace, but not other namespaces, including the testing
|
|
|
|
|
// namespace which Google Test's Message class is in.
|
|
|
|
|
//
|
|
|
|
|
// To allow STL containers (and other types that has a << operator
|
|
|
|
|
// defined in the global namespace) to be used in Google Test assertions,
|
|
|
|
|
// testing::Message must access the custom << operator from the global
|
|
|
|
|
// namespace. Hence this helper function.
|
|
|
|
|
//
|
|
|
|
|
// Note: Jeffrey Yasskin suggested an alternative fix by "using
|
|
|
|
|
// ::operator<<;" in the definition of Message's operator<<. That fix
|
|
|
|
|
// doesn't require a helper function, but unfortunately doesn't
|
|
|
|
|
// compile with MSVC.
|
|
|
|
|
template <typename T> |
|
|
|
|
inline void GTestStreamToHelper(std::ostream* os, const T& val) { |
|
|
|
|
*os << val; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class ProtocolMessage; |
|
|
|
|
namespace proto2 { class Message; } |
|
|
|
|
|
|
|
|
@ -6895,11 +7114,6 @@ GTEST_API_ extern int g_init_gtest_count; |
|
|
|
|
// stack trace.
|
|
|
|
|
GTEST_API_ extern const char kStackTraceMarker[]; |
|
|
|
|
|
|
|
|
|
// A secret type that Google Test users don't know about. It has no
|
|
|
|
|
// definition on purpose. Therefore it's impossible to create a
|
|
|
|
|
// Secret object, which is what we want.
|
|
|
|
|
class Secret; |
|
|
|
|
|
|
|
|
|
// Two overloaded helpers for checking at compile time whether an
|
|
|
|
|
// expression is a null pointer literal (i.e. NULL or any 0-valued
|
|
|
|
|
// compile-time integral constant). Their return values have
|
|
|
|
@ -6933,6 +7147,31 @@ char (&IsNullLiteralHelper(...))[2]; // NOLINT |
|
|
|
|
GTEST_API_ std::string AppendUserMessage( |
|
|
|
|
const std::string& gtest_msg, const Message& user_msg); |
|
|
|
|
|
|
|
|
|
#if GTEST_HAS_EXCEPTIONS |
|
|
|
|
|
|
|
|
|
// This exception is thrown by (and only by) a failed Google Test
|
|
|
|
|
// assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions
|
|
|
|
|
// are enabled). We derive it from std::runtime_error, which is for
|
|
|
|
|
// errors presumably detectable only at run time. Since
|
|
|
|
|
// std::runtime_error inherits from std::exception, many testing
|
|
|
|
|
// frameworks know how to extract and print the message inside it.
|
|
|
|
|
|
|
|
|
|
#ifdef _MSC_VER |
|
|
|
|
# pragma warning(push) // Saves the current warning state.
|
|
|
|
|
# pragma warning(disable:4275) // Temporarily disables warning 4275.
|
|
|
|
|
#endif // _MSC_VER
|
|
|
|
|
|
|
|
|
|
class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error { |
|
|
|
|
public: |
|
|
|
|
explicit GoogleTestFailureException(const TestPartResult& failure); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#ifdef _MSC_VER |
|
|
|
|
# pragma warning(pop) // Restores the warning state.
|
|
|
|
|
#endif // _MSC_VER
|
|
|
|
|
|
|
|
|
|
#endif // GTEST_HAS_EXCEPTIONS
|
|
|
|
|
|
|
|
|
|
// A helper class for creating scoped traces in user programs.
|
|
|
|
|
class GTEST_API_ ScopedTrace { |
|
|
|
|
public: |
|
|
|
@ -6952,16 +7191,6 @@ class GTEST_API_ ScopedTrace { |
|
|
|
|
// c'tor and d'tor. Therefore it doesn't
|
|
|
|
|
// need to be used otherwise.
|
|
|
|
|
|
|
|
|
|
// Converts a streamable value to an std::string. A NULL pointer is
|
|
|
|
|
// converted to "(null)". When the input value is a ::string,
|
|
|
|
|
// ::std::string, ::wstring, or ::std::wstring object, each NUL
|
|
|
|
|
// character in it is replaced with "\\0".
|
|
|
|
|
// Declared here but defined in gtest.h, so that it has access
|
|
|
|
|
// to the definition of the Message class, required by the ARM
|
|
|
|
|
// compiler.
|
|
|
|
|
template <typename T> |
|
|
|
|
std::string StreamableToString(const T& streamable); |
|
|
|
|
|
|
|
|
|
// Constructs and returns the message for an equality assertion
|
|
|
|
|
// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.
|
|
|
|
|
//
|
|
|
|
@ -7059,7 +7288,7 @@ class FloatingPoint { |
|
|
|
|
// bits. Therefore, 4 should be enough for ordinary use.
|
|
|
|
|
//
|
|
|
|
|
// See the following article for more details on ULP:
|
|
|
|
|
// http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm.
|
|
|
|
|
// http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
|
|
|
|
|
static const size_t kMaxUlps = 4; |
|
|
|
|
|
|
|
|
|
// Constructs a FloatingPoint from a raw floating-point number.
|
|
|
|
@ -7260,7 +7489,7 @@ typedef void (*TearDownTestCaseFunc)(); |
|
|
|
|
// test_case_name: name of the test case
|
|
|
|
|
// name: name of the test
|
|
|
|
|
// type_param the name of the test's type parameter, or NULL if
|
|
|
|
|
// this is not a typed or a type-parameterized test.
|
|
|
|
|
// this is not a typed or a type-parameterized test.
|
|
|
|
|
// value_param text representation of the test's value parameter,
|
|
|
|
|
// or NULL if this is not a type-parameterized test.
|
|
|
|
|
// fixture_class_id: ID of the test fixture class
|
|
|
|
@ -7270,7 +7499,8 @@ typedef void (*TearDownTestCaseFunc)(); |
|
|
|
|
// The newly created TestInfo instance will assume
|
|
|
|
|
// ownership of the factory object.
|
|
|
|
|
GTEST_API_ TestInfo* MakeAndRegisterTestInfo( |
|
|
|
|
const char* test_case_name, const char* name, |
|
|
|
|
const char* test_case_name, |
|
|
|
|
const char* name, |
|
|
|
|
const char* type_param, |
|
|
|
|
const char* value_param, |
|
|
|
|
TypeId fixture_class_id, |
|
|
|
@ -7358,8 +7588,8 @@ class TypeParameterizedTest { |
|
|
|
|
// First, registers the first type-parameterized test in the type
|
|
|
|
|
// list.
|
|
|
|
|
MakeAndRegisterTestInfo( |
|
|
|
|
String::Format("%s%s%s/%d", prefix, prefix[0] == '\0' ? "" : "/", |
|
|
|
|
case_name, index).c_str(), |
|
|
|
|
(std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name + "/" |
|
|
|
|
+ StreamableToString(index)).c_str(), |
|
|
|
|
GetPrefixUntilComma(test_names).c_str(), |
|
|
|
|
GetTypeName<Type>().c_str(), |
|
|
|
|
NULL, // No value parameter.
|
|
|
|
@ -8547,234 +8777,6 @@ class GTEST_API_ KilledBySignal { |
|
|
|
|
} // namespace testing
|
|
|
|
|
|
|
|
|
|
#endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
|
|
|
|
|
// Copyright 2005, Google Inc.
|
|
|
|
|
// All rights reserved.
|
|
|
|
|
//
|
|
|
|
|
// Redistribution and use in source and binary forms, with or without
|
|
|
|
|
// modification, are permitted provided that the following conditions are
|
|
|
|
|
// met:
|
|
|
|
|
//
|
|
|
|
|
// * Redistributions of source code must retain the above copyright
|
|
|
|
|
// notice, this list of conditions and the following disclaimer.
|
|
|
|
|
// * Redistributions in binary form must reproduce the above
|
|
|
|
|
// copyright notice, this list of conditions and the following disclaimer
|
|
|
|
|
// in the documentation and/or other materials provided with the
|
|
|
|
|
// distribution.
|
|
|
|
|
// * Neither the name of Google Inc. nor the names of its
|
|
|
|
|
// contributors may be used to endorse or promote products derived from
|
|
|
|
|
// this software without specific prior written permission.
|
|
|
|
|
//
|
|
|
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
|
|
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
|
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
|
|
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
//
|
|
|
|
|
// Author: wan@google.com (Zhanyong Wan)
|
|
|
|
|
//
|
|
|
|
|
// The Google C++ Testing Framework (Google Test)
|
|
|
|
|
//
|
|
|
|
|
// This header file defines the Message class.
|
|
|
|
|
//
|
|
|
|
|
// IMPORTANT NOTE: Due to limitation of the C++ language, we have to
|
|
|
|
|
// leave some internal implementation details in this header file.
|
|
|
|
|
// They are clearly marked by comments like this:
|
|
|
|
|
//
|
|
|
|
|
// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
|
|
|
|
//
|
|
|
|
|
// Such code is NOT meant to be used by a user directly, and is subject
|
|
|
|
|
// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user
|
|
|
|
|
// program!
|
|
|
|
|
|
|
|
|
|
#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ |
|
|
|
|
#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_ |
|
|
|
|
|
|
|
|
|
#include <limits> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace testing { |
|
|
|
|
|
|
|
|
|
// The Message class works like an ostream repeater.
|
|
|
|
|
//
|
|
|
|
|
// Typical usage:
|
|
|
|
|
//
|
|
|
|
|
// 1. You stream a bunch of values to a Message object.
|
|
|
|
|
// It will remember the text in a stringstream.
|
|
|
|
|
// 2. Then you stream the Message object to an ostream.
|
|
|
|
|
// This causes the text in the Message to be streamed
|
|
|
|
|
// to the ostream.
|
|
|
|
|
//
|
|
|
|
|
// For example;
|
|
|
|
|
//
|
|
|
|
|
// testing::Message foo;
|
|
|
|
|
// foo << 1 << " != " << 2;
|
|
|
|
|
// std::cout << foo;
|
|
|
|
|
//
|
|
|
|
|
// will print "1 != 2".
|
|
|
|
|
//
|
|
|
|
|
// Message is not intended to be inherited from. In particular, its
|
|
|
|
|
// destructor is not virtual.
|
|
|
|
|
//
|
|
|
|
|
// Note that stringstream behaves differently in gcc and in MSVC. You
|
|
|
|
|
// can stream a NULL char pointer to it in the former, but not in the
|
|
|
|
|
// latter (it causes an access violation if you do). The Message
|
|
|
|
|
// class hides this difference by treating a NULL char pointer as
|
|
|
|
|
// "(null)".
|
|
|
|
|
class GTEST_API_ Message { |
|
|
|
|
private: |
|
|
|
|
// The type of basic IO manipulators (endl, ends, and flush) for
|
|
|
|
|
// narrow streams.
|
|
|
|
|
typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&); |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
// Constructs an empty Message.
|
|
|
|
|
// We allocate the stringstream separately because otherwise each use of
|
|
|
|
|
// ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's
|
|
|
|
|
// stack frame leading to huge stack frames in some cases; gcc does not reuse
|
|
|
|
|
// the stack space.
|
|
|
|
|
Message() : ss_(new ::std::stringstream) { |
|
|
|
|
// By default, we want there to be enough precision when printing
|
|
|
|
|
// a double to a Message.
|
|
|
|
|
*ss_ << std::setprecision(std::numeric_limits<double>::digits10 + 2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Copy constructor.
|
|
|
|
|
Message(const Message& msg) : ss_(new ::std::stringstream) { // NOLINT
|
|
|
|
|
*ss_ << msg.GetString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Constructs a Message from a C-string.
|
|
|
|
|
explicit Message(const char* str) : ss_(new ::std::stringstream) { |
|
|
|
|
*ss_ << str; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if GTEST_OS_SYMBIAN |
|
|
|
|
// Streams a value (either a pointer or not) to this object.
|
|
|
|
|
template <typename T> |
|
|
|
|
inline Message& operator <<(const T& value) { |
|
|
|
|
StreamHelper(typename internal::is_pointer<T>::type(), value); |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
// Streams a non-pointer value to this object.
|
|
|
|
|
template <typename T> |
|
|
|
|
inline Message& operator <<(const T& val) { |
|
|
|
|
::GTestStreamToHelper(ss_.get(), val); |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Streams a pointer value to this object.
|
|
|
|
|
//
|
|
|
|
|
// This function is an overload of the previous one. When you
|
|
|
|
|
// stream a pointer to a Message, this definition will be used as it
|
|
|
|
|
// is more specialized. (The C++ Standard, section
|
|
|
|
|
// [temp.func.order].) If you stream a non-pointer, then the
|
|
|
|
|
// previous definition will be used.
|
|
|
|
|
//
|
|
|
|
|
// The reason for this overload is that streaming a NULL pointer to
|
|
|
|
|
// ostream is undefined behavior. Depending on the compiler, you
|
|
|
|
|
// may get "0", "(nil)", "(null)", or an access violation. To
|
|
|
|
|
// ensure consistent result across compilers, we always treat NULL
|
|
|
|
|
// as "(null)".
|
|
|
|
|
template <typename T> |
|
|
|
|
inline Message& operator <<(T* const& pointer) { // NOLINT
|
|
|
|
|
if (pointer == NULL) { |
|
|
|
|
*ss_ << "(null)"; |
|
|
|
|
} else { |
|
|
|
|
::GTestStreamToHelper(ss_.get(), pointer); |
|
|
|
|
} |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
#endif // GTEST_OS_SYMBIAN
|
|
|
|
|
|
|
|
|
|
// Since the basic IO manipulators are overloaded for both narrow
|
|
|
|
|
// and wide streams, we have to provide this specialized definition
|
|
|
|
|
// of operator <<, even though its body is the same as the
|
|
|
|
|
// templatized version above. Without this definition, streaming
|
|
|
|
|
// endl or other basic IO manipulators to Message will confuse the
|
|
|
|
|
// compiler.
|
|
|
|
|
Message& operator <<(BasicNarrowIoManip val) { |
|
|
|
|
*ss_ << val; |
|
|
|
|
return *this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Instead of 1/0, we want to see true/false for bool values.
|
|
|
|
|
Message& operator <<(bool b) { |
|
|
|
|
return *this << (b ? "true" : "false"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// These two overloads allow streaming a wide C string to a Message
|
|
|
|
|
// using the UTF-8 encoding.
|
|
|
|
|
Message& operator <<(const wchar_t* wide_c_str) { |
|
|
|
|
return *this << internal::String::ShowWideCString(wide_c_str); |
|
|
|
|
} |
|
|
|
|
Message& operator <<(wchar_t* wide_c_str) { |
|
|
|
|
return *this << internal::String::ShowWideCString(wide_c_str); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if GTEST_HAS_STD_WSTRING |
|
|
|
|
// Converts the given wide string to a narrow string using the UTF-8
|
|
|
|
|
// encoding, and streams the result to this Message object.
|
|
|
|
|
Message& operator <<(const ::std::wstring& wstr); |
|
|
|
|
#endif // GTEST_HAS_STD_WSTRING
|
|
|
|
|
|
|
|
|
|
#if GTEST_HAS_GLOBAL_WSTRING |
|
|
|
|
// Converts the given wide string to a narrow string using the UTF-8
|
|
|
|
|
// encoding, and streams the result to this Message object.
|
|
|
|
|
Message& operator <<(const ::wstring& wstr); |
|
|
|
|
#endif // GTEST_HAS_GLOBAL_WSTRING
|
|
|
|
|
|
|
|
|
|
// Gets the text streamed to this object so far as an std::string.
|
|
|
|
|
// Each '\0' character in the buffer is replaced with "\\0".
|
|
|
|
|
//
|
|
|
|
|
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
|
|
|
|
|
std::string GetString() const { |
|
|
|
|
return internal::StringStreamToString(ss_.get()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
|
|
|
|
|
#if GTEST_OS_SYMBIAN |
|
|
|
|
// These are needed as the Nokia Symbian Compiler cannot decide between
|
|
|
|
|
// const T& and const T* in a function template. The Nokia compiler _can_
|
|
|
|
|
// decide between class template specializations for T and T*, so a
|
|
|
|
|
// tr1::type_traits-like is_pointer works, and we can overload on that.
|
|
|
|
|
template <typename T> |
|
|
|
|
inline void StreamHelper(internal::true_type /*dummy*/, T* pointer) { |
|
|
|
|
if (pointer == NULL) { |
|
|
|
|
*ss_ << "(null)"; |
|
|
|
|
} else { |
|
|
|
|
::GTestStreamToHelper(ss_.get(), pointer); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
template <typename T> |
|
|
|
|
inline void StreamHelper(internal::false_type /*dummy*/, const T& value) { |
|
|
|
|
::GTestStreamToHelper(ss_.get(), value); |
|
|
|
|
} |
|
|
|
|
#endif // GTEST_OS_SYMBIAN
|
|
|
|
|
|
|
|
|
|
// We'll hold the text streamed to this object here.
|
|
|
|
|
const internal::scoped_ptr< ::std::stringstream> ss_; |
|
|
|
|
|
|
|
|
|
// We declare (but don't implement) this to prevent the compiler
|
|
|
|
|
// from implementing the assignment operator.
|
|
|
|
|
void operator=(const Message&); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// Streams a Message to an ostream.
|
|
|
|
|
inline std::ostream& operator <<(std::ostream& os, const Message& sb) { |
|
|
|
|
return os << sb.GetString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} // namespace testing
|
|
|
|
|
|
|
|
|
|
#endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
|
|
|
|
|
// This file was GENERATED by command:
|
|
|
|
|
// pump.py gtest-param-test.h.pump
|
|
|
|
|
// DO NOT EDIT BY HAND!!!
|
|
|
|
@ -10541,10 +10543,10 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { |
|
|
|
|
const string& instantiation_name = gen_it->first; |
|
|
|
|
ParamGenerator<ParamType> generator((*gen_it->second)()); |
|
|
|
|
|
|
|
|
|
Message test_case_name_stream; |
|
|
|
|
string test_case_name; |
|
|
|
|
if ( !instantiation_name.empty() ) |
|
|
|
|
test_case_name_stream << instantiation_name << "/"; |
|
|
|
|
test_case_name_stream << test_info->test_case_base_name; |
|
|
|
|
test_case_name = instantiation_name + "/"; |
|
|
|
|
test_case_name += test_info->test_case_base_name; |
|
|
|
|
|
|
|
|
|
int i = 0; |
|
|
|
|
for (typename ParamGenerator<ParamType>::iterator param_it = |
|
|
|
@ -10553,7 +10555,7 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase { |
|
|
|
|
Message test_name_stream; |
|
|
|
|
test_name_stream << test_info->test_base_name << "/" << i; |
|
|
|
|
MakeAndRegisterTestInfo( |
|
|
|
|
test_case_name_stream.GetString().c_str(), |
|
|
|
|
test_case_name.c_str(), |
|
|
|
|
test_name_stream.GetString().c_str(), |
|
|
|
|
NULL, // No type parameter.
|
|
|
|
|
PrintToString(*param_it).c_str(), |
|
|
|
@ -17615,26 +17617,16 @@ class ExecDeathTest; |
|
|
|
|
class NoExecDeathTest; |
|
|
|
|
class FinalSuccessChecker; |
|
|
|
|
class GTestFlagSaver; |
|
|
|
|
class StreamingListenerTest; |
|
|
|
|
class TestResultAccessor; |
|
|
|
|
class TestEventListenersAccessor; |
|
|
|
|
class TestEventRepeater; |
|
|
|
|
class UnitTestRecordPropertyTestHelper; |
|
|
|
|
class WindowsDeathTest; |
|
|
|
|
class UnitTestImpl* GetUnitTestImpl(); |
|
|
|
|
void ReportFailureInUnknownLocation(TestPartResult::Type result_type, |
|
|
|
|
const std::string& message); |
|
|
|
|
|
|
|
|
|
// Converts a streamable value to an std::string. A NULL pointer is
|
|
|
|
|
// converted to "(null)". When the input value is a ::string,
|
|
|
|
|
// ::std::string, ::wstring, or ::std::wstring object, each NUL
|
|
|
|
|
// character in it is replaced with "\\0".
|
|
|
|
|
// Declared in gtest-internal.h but defined here, so that it has access
|
|
|
|
|
// to the definition of the Message class, required by the ARM
|
|
|
|
|
// compiler.
|
|
|
|
|
template <typename T> |
|
|
|
|
std::string StreamableToString(const T& streamable) { |
|
|
|
|
return (Message() << streamable).GetString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} // namespace internal
|
|
|
|
|
|
|
|
|
|
// The friend relationship of some of these classes is cyclic.
|
|
|
|
@ -17853,20 +17845,21 @@ class GTEST_API_ Test { |
|
|
|
|
// non-fatal) failure.
|
|
|
|
|
static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } |
|
|
|
|
|
|
|
|
|
// Logs a property for the current test. Only the last value for a given
|
|
|
|
|
// key is remembered.
|
|
|
|
|
// These are public static so they can be called from utility functions
|
|
|
|
|
// that are not members of the test fixture.
|
|
|
|
|
// The arguments are const char* instead strings, as Google Test is used
|
|
|
|
|
// on platforms where string doesn't compile.
|
|
|
|
|
//
|
|
|
|
|
// Note that a driving consideration for these RecordProperty methods
|
|
|
|
|
// was to produce xml output suited to the Greenspan charting utility,
|
|
|
|
|
// which at present will only chart values that fit in a 32-bit int. It
|
|
|
|
|
// is the user's responsibility to restrict their values to 32-bit ints
|
|
|
|
|
// if they intend them to be used with Greenspan.
|
|
|
|
|
static void RecordProperty(const char* key, const char* value); |
|
|
|
|
static void RecordProperty(const char* key, int value); |
|
|
|
|
// Logs a property for the current test, test case, or for the entire
|
|
|
|
|
// invocation of the test program when used outside of the context of a
|
|
|
|
|
// test case. Only the last value for a given key is remembered. These
|
|
|
|
|
// are public static so they can be called from utility functions that are
|
|
|
|
|
// not members of the test fixture. Calls to RecordProperty made during
|
|
|
|
|
// lifespan of the test (from the moment its constructor starts to the
|
|
|
|
|
// moment its destructor finishes) will be output in XML as attributes of
|
|
|
|
|
// the <testcase> element. Properties recorded from fixture's
|
|
|
|
|
// SetUpTestCase or TearDownTestCase are logged as attributes of the
|
|
|
|
|
// corresponding <testsuite> element. Calls to RecordProperty made in the
|
|
|
|
|
// global context (before or after invocation of RUN_ALL_TESTS and from
|
|
|
|
|
// SetUp/TearDown method of Environment objects registered with Google
|
|
|
|
|
// Test) will be output as attributes of the <testsuites> element.
|
|
|
|
|
static void RecordProperty(const std::string& key, const std::string& value); |
|
|
|
|
static void RecordProperty(const std::string& key, int value); |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
// Creates a Test object.
|
|
|
|
@ -17935,7 +17928,7 @@ class TestProperty { |
|
|
|
|
// C'tor. TestProperty does NOT have a default constructor.
|
|
|
|
|
// Always use this constructor (with parameters) to create a
|
|
|
|
|
// TestProperty object.
|
|
|
|
|
TestProperty(const char* a_key, const char* a_value) : |
|
|
|
|
TestProperty(const std::string& a_key, const std::string& a_value) : |
|
|
|
|
key_(a_key), value_(a_value) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -17950,7 +17943,7 @@ class TestProperty { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Sets a new value, overriding the one supplied in the constructor.
|
|
|
|
|
void SetValue(const char* new_value) { |
|
|
|
|
void SetValue(const std::string& new_value) { |
|
|
|
|
value_ = new_value; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -18009,6 +18002,7 @@ class GTEST_API_ TestResult { |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
friend class TestInfo; |
|
|
|
|
friend class TestCase; |
|
|
|
|
friend class UnitTest; |
|
|
|
|
friend class internal::DefaultGlobalTestPartResultReporter; |
|
|
|
|
friend class internal::ExecDeathTest; |
|
|
|
@ -18033,13 +18027,16 @@ class GTEST_API_ TestResult { |
|
|
|
|
// a non-fatal failure if invalid (e.g., if it conflicts with reserved
|
|
|
|
|
// key names). If a property is already recorded for the same key, the
|
|
|
|
|
// value will be updated, rather than storing multiple values for the same
|
|
|
|
|
// key.
|
|
|
|
|
void RecordProperty(const TestProperty& test_property); |
|
|
|
|
// key. xml_element specifies the element for which the property is being
|
|
|
|
|
// recorded and is used for validation.
|
|
|
|
|
void RecordProperty(const std::string& xml_element, |
|
|
|
|
const TestProperty& test_property); |
|
|
|
|
|
|
|
|
|
// Adds a failure if the key is a reserved attribute of Google Test
|
|
|
|
|
// testcase tags. Returns true if the property is valid.
|
|
|
|
|
// TODO(russr): Validate attribute names are legal and human readable.
|
|
|
|
|
static bool ValidateTestProperty(const TestProperty& test_property); |
|
|
|
|
static bool ValidateTestProperty(const std::string& xml_element, |
|
|
|
|
const TestProperty& test_property); |
|
|
|
|
|
|
|
|
|
// Adds a test part result to the list.
|
|
|
|
|
void AddTestPartResult(const TestPartResult& test_part_result); |
|
|
|
@ -18140,8 +18137,10 @@ class GTEST_API_ TestInfo { |
|
|
|
|
friend class Test; |
|
|
|
|
friend class TestCase; |
|
|
|
|
friend class internal::UnitTestImpl; |
|
|
|
|
friend class internal::StreamingListenerTest; |
|
|
|
|
friend TestInfo* internal::MakeAndRegisterTestInfo( |
|
|
|
|
const char* test_case_name, const char* name, |
|
|
|
|
const char* test_case_name, |
|
|
|
|
const char* name, |
|
|
|
|
const char* type_param, |
|
|
|
|
const char* value_param, |
|
|
|
|
internal::TypeId fixture_class_id, |
|
|
|
@ -18151,9 +18150,10 @@ class GTEST_API_ TestInfo { |
|
|
|
|
|
|
|
|
|
// Constructs a TestInfo object. The newly constructed instance assumes
|
|
|
|
|
// ownership of the factory object.
|
|
|
|
|
TestInfo(const char* test_case_name, const char* name, |
|
|
|
|
const char* a_type_param, |
|
|
|
|
const char* a_value_param, |
|
|
|
|
TestInfo(const std::string& test_case_name, |
|
|
|
|
const std::string& name, |
|
|
|
|
const char* a_type_param, // NULL if not a type-parameterized test
|
|
|
|
|
const char* a_value_param, // NULL if not a value-parameterized test
|
|
|
|
|
internal::TypeId fixture_class_id, |
|
|
|
|
internal::TestFactoryBase* factory); |
|
|
|
|
|
|
|
|
@ -18261,6 +18261,10 @@ class GTEST_API_ TestCase { |
|
|
|
|
// total_test_count() - 1. If i is not in that range, returns NULL.
|
|
|
|
|
const TestInfo* GetTestInfo(int i) const; |
|
|
|
|
|
|
|
|
|
// Returns the TestResult that holds test properties recorded during
|
|
|
|
|
// execution of SetUpTestCase and TearDownTestCase.
|
|
|
|
|
const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; } |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
friend class Test; |
|
|
|
|
friend class internal::UnitTestImpl; |
|
|
|
@ -18349,6 +18353,9 @@ class GTEST_API_ TestCase { |
|
|
|
|
bool should_run_; |
|
|
|
|
// Elapsed time, in milliseconds.
|
|
|
|
|
TimeInMillis elapsed_time_; |
|
|
|
|
// Holds test properties recorded during execution of SetUpTestCase and
|
|
|
|
|
// TearDownTestCase.
|
|
|
|
|
TestResult ad_hoc_test_result_; |
|
|
|
|
|
|
|
|
|
// We disallow copying TestCases.
|
|
|
|
|
GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); |
|
|
|
@ -18634,6 +18641,10 @@ class GTEST_API_ UnitTest { |
|
|
|
|
// total_test_case_count() - 1. If i is not in that range, returns NULL.
|
|
|
|
|
const TestCase* GetTestCase(int i) const; |
|
|
|
|
|
|
|
|
|
// Returns the TestResult containing information on test failures and
|
|
|
|
|
// properties logged outside of individual test cases.
|
|
|
|
|
const TestResult& ad_hoc_test_result() const; |
|
|
|
|
|
|
|
|
|
// Returns the list of event listeners that can be used to track events
|
|
|
|
|
// inside Google Test.
|
|
|
|
|
TestEventListeners& listeners(); |
|
|
|
@ -18661,9 +18672,12 @@ class GTEST_API_ UnitTest { |
|
|
|
|
const std::string& os_stack_trace) |
|
|
|
|
GTEST_LOCK_EXCLUDED_(mutex_); |
|
|
|
|
|
|
|
|
|
// Adds a TestProperty to the current TestResult object. If the result already
|
|
|
|
|
// contains a property with the same key, the value will be updated.
|
|
|
|
|
void RecordPropertyForCurrentTest(const char* key, const char* value); |
|
|
|
|
// Adds a TestProperty to the current TestResult object when invoked from
|
|
|
|
|
// inside a test, to current TestCase's ad_hoc_test_result_ when invoked
|
|
|
|
|
// from SetUpTestCase or TearDownTestCase, or to the global property set
|
|
|
|
|
// when invoked elsewhere. If the result already contains a property with
|
|
|
|
|
// the same key, the value will be updated.
|
|
|
|
|
void RecordProperty(const std::string& key, const std::string& value); |
|
|
|
|
|
|
|
|
|
// Gets the i-th test case among all the test cases. i can range from 0 to
|
|
|
|
|
// total_test_case_count() - 1. If i is not in that range, returns NULL.
|
|
|
|
@ -18678,6 +18692,8 @@ class GTEST_API_ UnitTest { |
|
|
|
|
friend class Test; |
|
|
|
|
friend class internal::AssertHelper; |
|
|
|
|
friend class internal::ScopedTrace; |
|
|
|
|
friend class internal::StreamingListenerTest; |
|
|
|
|
friend class internal::UnitTestRecordPropertyTestHelper; |
|
|
|
|
friend Environment* AddGlobalTestEnvironment(Environment* env); |
|
|
|
|
friend internal::UnitTestImpl* internal::GetUnitTestImpl(); |
|
|
|
|
friend void internal::ReportFailureInUnknownLocation( |
|
|
|
@ -19223,7 +19239,12 @@ class WithParamInterface { |
|
|
|
|
// references static data, to reduce the opportunity for incorrect uses
|
|
|
|
|
// like writing 'WithParamInterface<bool>::GetParam()' for a test that
|
|
|
|
|
// uses a fixture whose parameter type is int.
|
|
|
|
|
const ParamType& GetParam() const { return *parameter_; } |
|
|
|
|
const ParamType& GetParam() const { |
|
|
|
|
GTEST_CHECK_(parameter_ != NULL) |
|
|
|
|
<< "GetParam() can only be called inside a value-parameterized test " |
|
|
|
|
<< "-- did you intend to write TEST_P instead of TEST_F?"; |
|
|
|
|
return *parameter_; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
// Sets parameter value. The caller is responsible for making sure the value
|
|
|
|
@ -20040,15 +20061,20 @@ bool StaticAssertTypeEq() { |
|
|
|
|
GTEST_TEST_(test_fixture, test_name, test_fixture, \
|
|
|
|
|
::testing::internal::GetTypeId<test_fixture>()) |
|
|
|
|
|
|
|
|
|
// Use this macro in main() to run all tests. It returns 0 if all
|
|
|
|
|
} // namespace testing
|
|
|
|
|
|
|
|
|
|
// Use this function in main() to run all tests. It returns 0 if all
|
|
|
|
|
// tests are successful, or 1 otherwise.
|
|
|
|
|
//
|
|
|
|
|
// RUN_ALL_TESTS() should be invoked after the command line has been
|
|
|
|
|
// parsed by InitGoogleTest().
|
|
|
|
|
//
|
|
|
|
|
// This function was formerly a macro; thus, it is in the global
|
|
|
|
|
// namespace and has an all-caps name.
|
|
|
|
|
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_; |
|
|
|
|
|
|
|
|
|
#define RUN_ALL_TESTS()\ |
|
|
|
|
(::testing::UnitTest::GetInstance()->Run()) |
|
|
|
|
|
|
|
|
|
} // namespace testing
|
|
|
|
|
inline int RUN_ALL_TESTS() { |
|
|
|
|
return ::testing::UnitTest::GetInstance()->Run(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif // GTEST_INCLUDE_GTEST_GTEST_H_
|
|
|
|
|