1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright 2005, Google Inc. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// All rights reserved. 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Redistribution and use in source and binary forms, with or without 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// modification, are permitted provided that the following conditions are 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// met: 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * Redistributions of source code must retain the above copyright 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// notice, this list of conditions and the following disclaimer. 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * Redistributions in binary form must reproduce the above 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// copyright notice, this list of conditions and the following disclaimer 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// in the documentation and/or other materials provided with the 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// distribution. 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * Neither the name of Google Inc. nor the names of its 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// contributors may be used to endorse or promote products derived from 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// this software without specific prior written permission. 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Author: wan@google.com (Zhanyong Wan) 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The Google C++ Testing Framework (Google Test) 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This header file defines the public API for Google Test. It should be 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// included by any test program that uses Google Test. 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// IMPORTANT NOTE: Due to limitation of the C++ language, we have to 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// leave some internal implementation details in this header file. 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// They are clearly marked by comments like this: 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Such code is NOT meant to be used by a user directly, and is subject 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// program! 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Acknowledgment: Google Test borrowed the idea of automatic test 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// registration from Barthelemy Dagenais' (barthelemy@prologique.com) 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// easyUnit framework. 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define GTEST_INCLUDE_GTEST_GTEST_H_ 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The following platform macros are used throughout Google Test: 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// _WIN32_WCE Windows CE (set in project files) 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// __SYMBIAN32__ Symbian (set by Symbian tool chain) 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Note that even though _MSC_VER and _WIN32_WCE really indicate a compiler 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// and a Win32 implementation, respectively, we use them to indicate the 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// combination of compiler - Win 32 API - C library, since the code currently 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// only supports: 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Windows proper with Visual C++ and MS C library (_MSC_VER && !_WIN32_WCE) and 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Windows Mobile with Visual C++ and no C library (_WIN32_WCE). 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <gtest/internal/gtest-internal.h> 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <gtest/internal/gtest-string.h> 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <gtest/gtest-death-test.h> 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <gtest/gtest-message.h> 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <gtest/gtest_prod.h> 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Depending on the platform, different string classes are available. 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// On Windows, ::std::string compiles only when exceptions are 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// enabled. On Linux, in addition to ::std::string, Google also makes 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// use of class ::string, which has the same interface as 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// ::std::string, but has a different implementation. 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The user can tell us whether ::std::string is available in his 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// environment by defining the macro GTEST_HAS_STD_STRING to either 1 79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// or 0 on the compiler command line. He can also define 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// GTEST_HAS_GLOBAL_STRING to 1 to indicate that ::string is available 81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// AND is a distinct type to ::std::string, or define it to 0 to 82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// indicate otherwise. 83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// If the user's ::std::string and ::string are the same class due to 85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// aliasing, he should define GTEST_HAS_STD_STRING to 1 and 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// GTEST_HAS_GLOBAL_STRING to 0. 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// If the user doesn't define GTEST_HAS_STD_STRING and/or 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// GTEST_HAS_GLOBAL_STRING, they are defined heuristically. 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace testing { 92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The upper limit for valid stack trace depths. 94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottconst int kMaxStackTraceDepth = 100; 95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This flag specifies the maximum number of stack frames to be 97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// printed in a failure message. 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottGTEST_DECLARE_int32(stack_trace_depth); 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This flag controls whether Google Test includes Google Test internal 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// stack frames in failure stack traces. 102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottGTEST_DECLARE_bool(show_internal_stack_frames); 103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The possible outcomes of a test part (i.e. an assertion or an 105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// explicit SUCCEED(), FAIL(), or ADD_FAILURE()). 106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottenum TestPartResultType { 107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott TPRT_SUCCESS, // Succeeded. 108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott TPRT_NONFATAL_FAILURE, // Failed but the test can continue. 109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott TPRT_FATAL_FAILURE // Failed and the test should be terminated. 110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace internal { 113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass GTestFlagSaver; 115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Converts a streamable value to a String. A NULL pointer is 117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// converted to "(null)". When the input value is a ::string, 118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// ::std::string, ::wstring, or ::std::wstring object, each NUL 119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// character in it is replaced with "\\0". 120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Declared in gtest-internal.h but defined here, so that it has access 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// to the definition of the Message class, required by the ARM 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// compiler. 123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scotttemplate <typename T> 124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottString StreamableToString(const T& streamable) { 125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return (Message() << streamable).GetString(); 126c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 128c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace internal 129c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 130c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// A class for indicating whether an assertion was successful. When 131c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// the assertion wasn't successful, the AssertionResult object 132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// remembers a non-empty message that described how it failed. 133c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 134c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This class is useful for defining predicate-format functions to be 135c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). 136c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 137c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The constructor of AssertionResult is private. To create an 138c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// instance of this class, use one of the factory functions 139c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// (AssertionSuccess() and AssertionFailure()). 140c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 141c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// For example, in order to be able to write: 142c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 143c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// // Verifies that Foo() returns an even number. 144c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_PRED_FORMAT1(IsEven, Foo()); 145c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 146c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// you just need to define: 147c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 148c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// testing::AssertionResult IsEven(const char* expr, int n) { 149c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// if ((n % 2) == 0) return testing::AssertionSuccess(); 150c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 151c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Message msg; 152c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// msg << "Expected: " << expr << " is even\n" 153c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// << " Actual: it's " << n; 154c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// return testing::AssertionFailure(msg); 155c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// } 156c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 157c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// If Foo() returns 5, you will see the following message: 158c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 159c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Expected: Foo() is even 160c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Actual: it's 5 161c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass AssertionResult { 162c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 163c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Declares factory functions for making successful and failed 164c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // assertion results as friends. 165c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott friend AssertionResult AssertionSuccess(); 166c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott friend AssertionResult AssertionFailure(const Message&); 167c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 168c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true iff the assertion succeeded. 169c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott operator bool() const { return failure_message_.c_str() == NULL; } // NOLINT 170c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 171c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns the assertion's failure message. 172c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* failure_message() const { return failure_message_.c_str(); } 173c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 174c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 175c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The default constructor. It is used when the assertion succeeded. 176c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott AssertionResult() {} 177c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 178c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The constructor used when the assertion failed. 179c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott explicit AssertionResult(const internal::String& failure_message); 180c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 181c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Stores the assertion's failure message. 182c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott internal::String failure_message_; 183c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 184c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 185c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Makes a successful assertion result. 186c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult AssertionSuccess(); 187c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 188c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Makes a failed assertion result with the given failure message. 189c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult AssertionFailure(const Message& msg); 190c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 191c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The abstract class that all tests inherit from. 192c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 193c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// In Google Test, a unit test program contains one or many TestCases, and 194c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// each TestCase contains one or many Tests. 195c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 196c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// When you define a test using the TEST macro, you don't need to 197c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// explicitly derive from Test - the TEST macro automatically does 198c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// this for you. 199c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 200c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The only time you derive from Test is when defining a test fixture 201c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// to be used a TEST_F. For example: 202c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 203c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// class FooTest : public testing::Test { 204c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// protected: 205c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// virtual void SetUp() { ... } 206c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// virtual void TearDown() { ... } 207c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// ... 208c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// }; 209c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 210c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// TEST_F(FooTest, Bar) { ... } 211c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// TEST_F(FooTest, Baz) { ... } 212c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 213c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Test is not copyable. 214c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass Test { 215c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 216c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott friend class internal::TestInfoImpl; 217c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 218c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Defines types for pointers to functions that set up and tear down 219c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // a test case. 220c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott typedef void (*SetUpTestCaseFunc)(); 221c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott typedef void (*TearDownTestCaseFunc)(); 222c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 223c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The d'tor is virtual as we intend to inherit from Test. 224c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual ~Test(); 225c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 226c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true iff the current test has a fatal failure. 227c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static bool HasFatalFailure(); 228c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 229c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Logs a property for the current test. Only the last value for a given 230c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // key is remembered. 231c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // These are public static so they can be called from utility functions 232c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // that are not members of the test fixture. 233c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The arguments are const char* instead strings, as Google Test is used 234c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // on platforms where string doesn't compile. 235c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 236c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Note that a driving consideration for these RecordProperty methods 237c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // was to produce xml output suited to the Greenspan charting utility, 238c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // which at present will only chart values that fit in a 32-bit int. It 239c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // is the user's responsibility to restrict their values to 32-bit ints 240c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // if they intend them to be used with Greenspan. 241c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static void RecordProperty(const char* key, const char* value); 242c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static void RecordProperty(const char* key, int value); 243c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 244c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott protected: 245c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Creates a Test object. 246c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Test(); 247c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 248c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Sets up the stuff shared by all tests in this test case. 249c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 250c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Google Test will call Foo::SetUpTestCase() before running the first 251c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // test in test case Foo. Hence a sub-class can define its own 252c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // SetUpTestCase() method to shadow the one defined in the super 253c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // class. 254c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static void SetUpTestCase() {} 255c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 256c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Tears down the stuff shared by all tests in this test case. 257c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 258c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Google Test will call Foo::TearDownTestCase() after running the last 259c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // test in test case Foo. Hence a sub-class can define its own 260c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // TearDownTestCase() method to shadow the one defined in the super 261c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // class. 262c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static void TearDownTestCase() {} 263c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 264c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Sets up the test fixture. 265c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void SetUp(); 266c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 267c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Tears down the test fixture. 268c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void TearDown(); 269c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 270c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 271c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true iff the current test has the same fixture class as 272c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // the first test in the current test case. 273c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static bool HasSameFixtureClass(); 274c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 275c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Runs the test after the test fixture has been set up. 276c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 277c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // A sub-class must implement this to define the test logic. 278c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 279c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. 280c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Instead, use the TEST or TEST_F macro. 281c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void TestBody() = 0; 282c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 283c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Sets up, executes, and tears down the test. 284c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void Run(); 285c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 286c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Uses a GTestFlagSaver to save and restore all Google Test flags. 287c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const internal::GTestFlagSaver* const gtest_flag_saver_; 288c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 289c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Often a user mis-spells SetUp() as Setup() and spends a long time 290c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // wondering why it is never called by Google Test. The declaration of 291c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // the following method is solely for catching such an error at 292c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // compile time: 293c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 294c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // - The return type is deliberately chosen to be not void, so it 295c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // will be a conflict if a user declares void Setup() in his test 296c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // fixture. 297c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 298c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // - This method is private, so it will be another compiler error 299c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // if a user calls it from his test fixture. 300c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 301c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // DO NOT OVERRIDE THIS FUNCTION. 302c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 303c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // If you see an error about overriding the following function or 304c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // about it being private, you have mis-spelled SetUp() as Setup(). 305c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct Setup_should_be_spelled_SetUp {}; 306c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } 307c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 308c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // We disallow copying Tests. 309c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_DISALLOW_COPY_AND_ASSIGN(Test); 310c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 311c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 312c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 313c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Defines the type of a function pointer that creates a Test object 314c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// when invoked. 315c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scotttypedef Test* (*TestMaker)(); 316c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 317c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 318c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// A TestInfo object stores the following information about a test: 319c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 320c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Test case name 321c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Test name 322c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Whether the test should be run 323c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// A function pointer that creates the test object when invoked 324c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Test result 325c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 326c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The constructor of TestInfo registers itself with the UnitTest 327c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// singleton such that the RUN_ALL_TESTS() macro knows which tests to 328c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// run. 329c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass TestInfo { 330c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 331c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Destructs a TestInfo object. This function is not virtual, so 332c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // don't inherit from TestInfo. 333c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ~TestInfo(); 334c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 335c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Creates a TestInfo object and registers it with the UnitTest 336c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // singleton; returns the created object. 337c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 338c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Arguments: 339c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 340c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // test_case_name: name of the test case 341c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // name: name of the test 342c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // fixture_class_id: ID of the test fixture class 343c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // set_up_tc: pointer to the function that sets up the test case 344c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // tear_down_tc: pointer to the function that tears down the test case 345c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // maker: pointer to the function that creates a test object 346c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 347c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // This is public only because it's needed by the TEST and TEST_F macros. 348c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 349c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static TestInfo* MakeAndRegisterInstance( 350c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* test_case_name, 351c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* name, 352c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott internal::TypeId fixture_class_id, 353c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Test::SetUpTestCaseFunc set_up_tc, 354c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Test::TearDownTestCaseFunc tear_down_tc, 355c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott TestMaker maker); 356c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 357c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns the test case name. 358c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* test_case_name() const; 359c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 360c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns the test name. 361c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* name() const; 362c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 363c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns true if this test should run. 364c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 365c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Google Test allows the user to filter the tests by their full names. 366c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The full name of a test Bar in test case Foo is defined as 367c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // "Foo.Bar". Only the tests that match the filter will run. 368c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 369c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // A filter is a colon-separated list of glob (not regex) patterns, 370c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // optionally followed by a '-' and a colon-separated list of 371c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // negative patterns (tests to exclude). A test is run if it 372c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // matches one of the positive patterns and does not match any of 373c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // the negative patterns. 374c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 375c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // For example, *A*:Foo.* is a filter that matches any string that 376c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // contains the character 'A' or starts with "Foo.". 377c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool should_run() const; 378c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 379c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns the result of the test. 380c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const internal::TestResult* result() const; 381c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 382c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifdef GTEST_HAS_DEATH_TEST 383c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott friend class internal::DefaultDeathTestFactory; 384c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // GTEST_HAS_DEATH_TEST 385c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott friend class internal::TestInfoImpl; 386c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott friend class internal::UnitTestImpl; 387c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott friend class Test; 388c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott friend class TestCase; 389c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 390c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Increments the number of death tests encountered in this test so 391c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // far. 392c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int increment_death_test_count(); 393c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 394c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Accessors for the implementation object. 395c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott internal::TestInfoImpl* impl() { return impl_; } 396c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const internal::TestInfoImpl* impl() const { return impl_; } 397c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 398c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Constructs a TestInfo object. 399c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott TestInfo(const char* test_case_name, const char* name, 400c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott internal::TypeId fixture_class_id, TestMaker maker); 401c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 402c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // An opaque implementation object. 403c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott internal::TestInfoImpl* impl_; 404c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 405c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_DISALLOW_COPY_AND_ASSIGN(TestInfo); 406c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 407c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 408c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// An Environment object is capable of setting up and tearing down an 409c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// environment. The user should subclass this to define his own 410c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// environment(s). 411c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 412c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// An Environment object does the set-up and tear-down in virtual 413c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// methods SetUp() and TearDown() instead of the constructor and the 414c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// destructor, as: 415c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 416c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1. You cannot safely throw from a destructor. This is a problem 417c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// as in some cases Google Test is used where exceptions are enabled, and 418c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// we may want to implement ASSERT_* using exceptions where they are 419c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// available. 420c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 2. You cannot use ASSERT_* directly in a constructor or 421c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// destructor. 422c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass Environment { 423c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 424c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The d'tor is virtual as we need to subclass Environment. 425c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual ~Environment() {} 426c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 427c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Override this to define how to set up the environment. 428c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void SetUp() {} 429c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 430c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Override this to define how to tear down the environment. 431c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void TearDown() {} 432c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 433c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // If you see an error about overriding the following function or 434c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // about it being private, you have mis-spelled SetUp() as Setup(). 435c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott struct Setup_should_be_spelled_SetUp {}; 436c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } 437c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 438c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 439c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// A UnitTest consists of a list of TestCases. 440c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 441c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This is a singleton class. The only instance of UnitTest is 442c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// created when UnitTest::GetInstance() is first called. This 443c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// instance is never deleted. 444c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 445c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// UnitTest is not copyable. 446c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 447c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This class is thread-safe as long as the methods are called 448c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// according to their specification. 449c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass UnitTest { 450c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 451c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Gets the singleton UnitTest object. The first time this method 452c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // is called, a UnitTest object is constructed and returned. 453c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Consecutive calls will return the same object. 454c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static UnitTest* GetInstance(); 455c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 456c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Registers and returns a global test environment. When a test 457c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // program is run, all global test environments will be set-up in 458c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // the order they were registered. After all tests in the program 459c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // have finished, all global test environments will be torn-down in 460c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // the *reverse* order they were registered. 461c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 462c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The UnitTest object takes ownership of the given environment. 463c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 464c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // This method can only be called from the main thread. 465c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Environment* AddEnvironment(Environment* env); 466c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 467c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Adds a TestPartResult to the current TestResult object. All 468c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) 469c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // eventually call this to report their results. The user code 470c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // should use the assertion macros instead of calling this directly. 471c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 472c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 473c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void AddTestPartResult(TestPartResultType result_type, 474c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* file_name, 475c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int line_number, 476c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const internal::String& message, 477c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const internal::String& os_stack_trace); 478c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 479c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Adds a TestProperty to the current TestResult object. If the result already 480c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // contains a property with the same key, the value will be updated. 481c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void RecordPropertyForCurrentTest(const char* key, const char* value); 482c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 483c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Runs all tests in this UnitTest object and prints the result. 484c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns 0 if successful, or 1 otherwise. 485c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 486c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // This method can only be called from the main thread. 487c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 488c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 489c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int Run() GTEST_MUST_USE_RESULT; 490c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 491c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns the TestCase object for the test that's currently running, 492c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // or NULL if no test is running. 493c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const TestCase* current_test_case() const; 494c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 495c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Returns the TestInfo object for the test that's currently running, 496c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // or NULL if no test is running. 497c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const TestInfo* current_test_info() const; 498c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 499c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Accessors for the implementation object. 500c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott internal::UnitTestImpl* impl() { return impl_; } 501c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const internal::UnitTestImpl* impl() const { return impl_; } 502c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 503c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // ScopedTrace is a friend as it needs to modify the per-thread 504c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // trace stack, which is a private member of UnitTest. 505c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott friend class internal::ScopedTrace; 506c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 507c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Creates an empty UnitTest. 508c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UnitTest(); 509c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 510c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // D'tor 511c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual ~UnitTest(); 512c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 513c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Pushes a trace defined by SCOPED_TRACE() on to the per-thread 514c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Google Test trace stack. 515c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void PushGTestTrace(const internal::TraceInfo& trace); 516c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 517c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Pops a trace from the per-thread Google Test trace stack. 518c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void PopGTestTrace(); 519c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 520c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Protects mutable state in *impl_. This is mutable as some const 521c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // methods need to lock it too. 522c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott mutable internal::Mutex mutex_; 523c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 524c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Opaque implementation object. This field is never changed once 525c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // the object is constructed. We don't mark it as const here, as 526c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // doing so will cause a warning in the constructor of UnitTest. 527c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Mutable state in *impl_ is protected by mutex_. 528c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott internal::UnitTestImpl* impl_; 529c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 530c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // We disallow copying UnitTest. 531c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_DISALLOW_COPY_AND_ASSIGN(UnitTest); 532c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 533c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 534c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// A convenient wrapper for adding an environment for the test 535c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// program. 536c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 537c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// You should call this before RUN_ALL_TESTS() is called, probably in 538c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// main(). If you use gtest_main, you need to call this before main() 539c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// starts for it to take effect. For example, you can define a global 540c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// variable like this: 541c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 542c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// testing::Environment* const foo_env = 543c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// testing::AddGlobalTestEnvironment(new FooEnvironment); 544c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 545c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// However, we strongly recommend you to write your own main() and 546c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// call AddGlobalTestEnvironment() there, as relying on initialization 547c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// of global variables makes the code harder to read and may cause 548c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// problems when you register multiple environments from different 549c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// translation units and the environments have dependencies among them 550c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// (remember that the compiler doesn't guarantee the order in which 551c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// global variables from different translation units are initialized). 552c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottinline Environment* AddGlobalTestEnvironment(Environment* env) { 553c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return UnitTest::GetInstance()->AddEnvironment(env); 554c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 555c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 556c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Initializes Google Test. This must be called before calling 557c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// RUN_ALL_TESTS(). In particular, it parses a command line for the 558c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// flags that Google Test recognizes. Whenever a Google Test flag is 559c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// seen, it is removed from argv, and *argc is decremented. 560c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 561c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// No value is returned. Instead, the Google Test flag variables are 562c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// updated. 563c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid InitGoogleTest(int* argc, char** argv); 564c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 565c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This overloaded version can be used in Windows programs compiled in 566c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// UNICODE mode. 567c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifdef GTEST_OS_WINDOWS 568c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid InitGoogleTest(int* argc, wchar_t** argv); 569c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // GTEST_OS_WINDOWS 570c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 571c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace internal { 572c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 573c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// These overloaded versions handle ::std::string and ::std::wstring. 574c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if GTEST_HAS_STD_STRING 575c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottinline String FormatForFailureMessage(const ::std::string& str) { 576c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return (Message() << '"' << str << '"').GetString(); 577c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 578c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // GTEST_HAS_STD_STRING 579c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 580c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if GTEST_HAS_STD_WSTRING 581c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottinline String FormatForFailureMessage(const ::std::wstring& wstr) { 582c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return (Message() << "L\"" << wstr << '"').GetString(); 583c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 584c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // GTEST_HAS_STD_WSTRING 585c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 586c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// These overloaded versions handle ::string and ::wstring. 587c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if GTEST_HAS_GLOBAL_STRING 588c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottinline String FormatForFailureMessage(const ::string& str) { 589c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return (Message() << '"' << str << '"').GetString(); 590c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 591c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // GTEST_HAS_GLOBAL_STRING 592c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 593c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if GTEST_HAS_GLOBAL_WSTRING 594c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottinline String FormatForFailureMessage(const ::wstring& wstr) { 595c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return (Message() << "L\"" << wstr << '"').GetString(); 596c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 597c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // GTEST_HAS_GLOBAL_WSTRING 598c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 599c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) 600c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// operand to be used in a failure message. The type (but not value) 601c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// of the other operand may affect the format. This allows us to 602c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// print a char* as a raw pointer when it is compared against another 603c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// char*, and print it as a C string when it is compared against an 604c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// std::string object, for example. 605c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 606c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The default implementation ignores the type of the other operand. 607c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Some specialized versions are used to handle formatting wide or 608c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// narrow C strings. 609c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 610c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 611c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scotttemplate <typename T1, typename T2> 612c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottString FormatForComparisonFailureMessage(const T1& value, 613c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const T2& /* other_operand */) { 614c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return FormatForFailureMessage(value); 615c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 616c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 617c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The helper function for {ASSERT|EXPECT}_EQ. 618c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scotttemplate <typename T1, typename T2> 619c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelperEQ(const char* expected_expression, 620c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual_expression, 621c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const T1& expected, 622c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const T2& actual) { 623c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (expected == actual) { 624c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return AssertionSuccess(); 625c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 626c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 627c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return EqFailure(expected_expression, 628c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott actual_expression, 629c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott FormatForComparisonFailureMessage(expected, actual), 630c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott FormatForComparisonFailureMessage(actual, expected), 631c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott false); 632c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 633c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 634c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// With this overloaded version, we allow anonymous enums to be used 635c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums 636c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// can be implicitly cast to BiggestInt. 637c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelperEQ(const char* expected_expression, 638c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual_expression, 639c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott BiggestInt expected, 640c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott BiggestInt actual); 641c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 642c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The helper class for {ASSERT|EXPECT}_EQ. The template argument 643c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// lhs_is_null_literal is true iff the first argument to ASSERT_EQ() 644c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// is a null pointer literal. The following default implementation is 645c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// for lhs_is_null_literal being false. 646c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scotttemplate <bool lhs_is_null_literal> 647c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass EqHelper { 648c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 649c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // This templatized version is for the general case. 650c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott template <typename T1, typename T2> 651c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static AssertionResult Compare(const char* expected_expression, 652c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual_expression, 653c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const T1& expected, 654c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const T2& actual) { 655c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return CmpHelperEQ(expected_expression, actual_expression, expected, 656c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott actual); 657c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 658c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 659c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // With this overloaded version, we allow anonymous enums to be used 660c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous 661c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // enums can be implicitly cast to BiggestInt. 662c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // 663c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Even though its body looks the same as the above version, we 664c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // cannot merge the two, as it will make anonymous enums unhappy. 665c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static AssertionResult Compare(const char* expected_expression, 666c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual_expression, 667c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott BiggestInt expected, 668c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott BiggestInt actual) { 669c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return CmpHelperEQ(expected_expression, actual_expression, expected, 670c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott actual); 671c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 672c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 673c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 674c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This specialization is used when the first argument to ASSERT_EQ() 675c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// is a null pointer literal. 676c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scotttemplate <> 677c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass EqHelper<true> { 678c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 679c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // We define two overloaded versions of Compare(). The first 680c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // version will be picked when the second argument to ASSERT_EQ() is 681c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or 682c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // EXPECT_EQ(false, a_bool). 683c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott template <typename T1, typename T2> 684c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static AssertionResult Compare(const char* expected_expression, 685c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual_expression, 686c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const T1& expected, 687c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const T2& actual) { 688c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return CmpHelperEQ(expected_expression, actual_expression, expected, 689c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott actual); 690c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 691c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 692c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // This version will be picked when the second argument to 693c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // ASSERT_EQ() is a pointer, e.g. ASSERT_EQ(NULL, a_pointer). 694c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott template <typename T1, typename T2> 695c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static AssertionResult Compare(const char* expected_expression, 696c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual_expression, 697c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const T1& expected, 698c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott T2* actual) { 699c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // We already know that 'expected' is a null pointer. 700c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return CmpHelperEQ(expected_expression, actual_expression, 701c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static_cast<T2*>(NULL), actual); 702c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 703c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 704c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 705c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// A macro for implementing the helper functions needed to implement 706c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste 707c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// of similar code. 708c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 709c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// For each templatized helper function, we also define an overloaded 710c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// version for BiggestInt in order to reduce code bloat and allow 711c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled 712c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// with gcc 4. 713c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 714c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 715c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define GTEST_IMPL_CMP_HELPER(op_name, op)\ 716c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scotttemplate <typename T1, typename T2>\ 717c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 718c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const T1& val1, const T2& val2) {\ 719c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (val1 op val2) {\ 720c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return AssertionSuccess();\ 721c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } else {\ 722c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Message msg;\ 723c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott msg << "Expected: (" << expr1 << ") " #op " (" << expr2\ 724c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ 725c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott << " vs " << FormatForComparisonFailureMessage(val2, val1);\ 726c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return AssertionFailure(msg);\ 727c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott }\ 728c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}\ 729c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 730c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott BiggestInt val1, BiggestInt val2); 731c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 732c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 733c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 734c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Implements the helper function for {ASSERT|EXPECT}_NE 735c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottGTEST_IMPL_CMP_HELPER(NE, !=) 736c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Implements the helper function for {ASSERT|EXPECT}_LE 737c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottGTEST_IMPL_CMP_HELPER(LE, <=) 738c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Implements the helper function for {ASSERT|EXPECT}_LT 739c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottGTEST_IMPL_CMP_HELPER(LT, < ) 740c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Implements the helper function for {ASSERT|EXPECT}_GE 741c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottGTEST_IMPL_CMP_HELPER(GE, >=) 742c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Implements the helper function for {ASSERT|EXPECT}_GT 743c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottGTEST_IMPL_CMP_HELPER(GT, > ) 744c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 745c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#undef GTEST_IMPL_CMP_HELPER 746c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 747c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The helper function for {ASSERT|EXPECT}_STREQ. 748c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 749c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 750c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelperSTREQ(const char* expected_expression, 751c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual_expression, 752c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected, 753c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual); 754c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 755c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The helper function for {ASSERT|EXPECT}_STRCASEEQ. 756c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 757c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 758c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, 759c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual_expression, 760c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expected, 761c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual); 762c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 763c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The helper function for {ASSERT|EXPECT}_STRNE. 764c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 765c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 766c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelperSTRNE(const char* s1_expression, 767c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* s2_expression, 768c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* s1, 769c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* s2); 770c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 771c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The helper function for {ASSERT|EXPECT}_STRCASENE. 772c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 773c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 774c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelperSTRCASENE(const char* s1_expression, 775c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* s2_expression, 776c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* s1, 777c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* s2); 778c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 779c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 780c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Helper function for *_STREQ on wide strings. 781c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 782c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 783c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelperSTREQ(const char* expected_expression, 784c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual_expression, 785c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const wchar_t* expected, 786c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const wchar_t* actual); 787c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 788c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Helper function for *_STRNE on wide strings. 789c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 790c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 791c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelperSTRNE(const char* s1_expression, 792c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* s2_expression, 793c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const wchar_t* s1, 794c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const wchar_t* s2); 795c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 796c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace internal 797c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 798c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// IsSubstring() and IsNotSubstring() are intended to be used as the 799c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by 800c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// themselves. They check whether needle is a substring of haystack 801c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// (NULL is considered a substring of itself only), and return an 802c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// appropriate error message when they fail. 803c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 804c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The {needle,haystack}_expr arguments are the stringified 805c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// expressions that generated the two real arguments. 806c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult IsSubstring( 807c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* needle_expr, const char* haystack_expr, 808c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* needle, const char* haystack); 809c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult IsSubstring( 810c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* needle_expr, const char* haystack_expr, 811c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const wchar_t* needle, const wchar_t* haystack); 812c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult IsNotSubstring( 813c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* needle_expr, const char* haystack_expr, 814c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* needle, const char* haystack); 815c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult IsNotSubstring( 816c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* needle_expr, const char* haystack_expr, 817c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const wchar_t* needle, const wchar_t* haystack); 818c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if GTEST_HAS_STD_STRING 819c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult IsSubstring( 820c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* needle_expr, const char* haystack_expr, 821c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const ::std::string& needle, const ::std::string& haystack); 822c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult IsNotSubstring( 823c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* needle_expr, const char* haystack_expr, 824c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const ::std::string& needle, const ::std::string& haystack); 825c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // GTEST_HAS_STD_STRING 826c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 827c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if GTEST_HAS_STD_WSTRING 828c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult IsSubstring( 829c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* needle_expr, const char* haystack_expr, 830c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const ::std::wstring& needle, const ::std::wstring& haystack); 831c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult IsNotSubstring( 832c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* needle_expr, const char* haystack_expr, 833c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const ::std::wstring& needle, const ::std::wstring& haystack); 834c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // GTEST_HAS_STD_WSTRING 835c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 836c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace internal { 837c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 838c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Helper template function for comparing floating-points. 839c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 840c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Template parameter: 841c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 842c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// RawType: the raw floating-point type (either float or double) 843c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 844c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 845c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scotttemplate <typename RawType> 846c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, 847c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* actual_expression, 848c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott RawType expected, 849c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott RawType actual) { 850c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const FloatingPoint<RawType> lhs(expected), rhs(actual); 851c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 852c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (lhs.AlmostEquals(rhs)) { 853c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return AssertionSuccess(); 854c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 855c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 856c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott StrStream expected_ss; 857c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 858c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott << expected; 859c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 860c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott StrStream actual_ss; 861c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 862c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott << actual; 863c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 864c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return EqFailure(expected_expression, 865c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott actual_expression, 866c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott StrStreamToString(&expected_ss), 867c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott StrStreamToString(&actual_ss), 868c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott false); 869c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 870c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 871c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Helper function for implementing ASSERT_NEAR. 872c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 873c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 874c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult DoubleNearPredFormat(const char* expr1, 875c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* expr2, 876c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* abs_error_expr, 877c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott double val1, 878c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott double val2, 879c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott double abs_error); 880c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 881c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. 882c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// A class that enables one to stream messages to assertion macros 883c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass AssertHelper { 884c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 885c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Constructor. 886c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott AssertHelper(TestPartResultType type, const char* file, int line, 887c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* message); 888c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Message assignment is a semantic trick to enable assertion 889c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // streaming; see the GTEST_MESSAGE macro below. 890c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void operator=(const Message& message) const; 891c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 892c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott TestPartResultType const type_; 893c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const char* const file_; 894c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int const line_; 895c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott String const message_; 896c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 897c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_DISALLOW_COPY_AND_ASSIGN(AssertHelper); 898c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 899c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 900c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace internal 901c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 902c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Macros for indicating success/failure in test code. 903c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 904c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// ADD_FAILURE unconditionally adds a failure to the current test. 905c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// SUCCEED generates a success - it doesn't automatically make the 906c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// current test successful, as a test is only successful when it has 907c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// no failure. 908c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 909c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_* verifies that a certain condition is satisfied. If not, 910c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// it behaves like ADD_FAILURE. In particular: 911c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 912c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_TRUE verifies that a Boolean condition is true. 913c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_FALSE verifies that a Boolean condition is false. 914c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 915c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except 916c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// that they will also abort the current function on failure. People 917c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// usually want the fail-fast behavior of FAIL and ASSERT_*, but those 918c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// writing data-driven tests often find themselves using ADD_FAILURE 919c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// and EXPECT_* more. 920c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 921c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Examples: 922c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 923c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_TRUE(server.StatusIsOK()); 924c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// ASSERT_FALSE(server.HasPendingRequest(port)) 925c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// << "There are still pending requests " << "on port " << port; 926c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 927c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Generates a nonfatal failure with a generic message. 928c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ADD_FAILURE() GTEST_NONFATAL_FAILURE("Failed") 929c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 930c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Generates a fatal failure with a generic message. 931c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define FAIL() GTEST_FATAL_FAILURE("Failed") 932c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 933c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Generates a success with a generic message. 934c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define SUCCEED() GTEST_SUCCESS("Succeeded") 935c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 936c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Boolean assertions. 937c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_TRUE(condition) \ 938c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_TEST_BOOLEAN(condition, #condition, false, true, \ 939c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_NONFATAL_FAILURE) 940c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_FALSE(condition) \ 941c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_TEST_BOOLEAN(!(condition), #condition, true, false, \ 942c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_NONFATAL_FAILURE) 943c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_TRUE(condition) \ 944c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_TEST_BOOLEAN(condition, #condition, false, true, \ 945c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_FATAL_FAILURE) 946c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_FALSE(condition) \ 947c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_TEST_BOOLEAN(!(condition), #condition, true, false, \ 948c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_FATAL_FAILURE) 949c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 950c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Includes the auto-generated header that implements a family of 951c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// generic predicate assertion macros. 952c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <gtest/gtest_pred_impl.h> 953c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 954c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Macros for testing equalities and inequalities. 955c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 956c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual 957c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 958c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 959c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 960c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 961c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 962c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 963c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// When they are not, Google Test prints both the tested expressions and 964c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// their actual values. The values must be compatible built-in types, 965c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// or you will get a compiler error. By "compatible" we mean that the 966c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// values can be compared by the respective operator. 967c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 968c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Note: 969c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 970c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1. It is possible to make a user-defined type work with 971c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// {ASSERT|EXPECT}_??(), but that requires overloading the 972c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// comparison operators and is thus discouraged by the Google C++ 973c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Usage Guide. Therefore, you are advised to use the 974c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// {ASSERT|EXPECT}_TRUE() macro to assert that two objects are 975c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// equal. 976c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 977c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on 978c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// pointers (in particular, C strings). Therefore, if you use it 979c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// with two C strings, you are testing how their locations in memory 980c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// are related, not how their content is related. To compare two C 981c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// strings by content, use {ASSERT|EXPECT}_STR*(). 982c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 983c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to 984c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you 985c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// what the actual value is when it fails, and similarly for the 986c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// other comparisons. 987c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 988c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 4. Do not depend on the order in which {ASSERT|EXPECT}_??() 989c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// evaluate their arguments, which is undefined. 990c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 991c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 5. These macros evaluate their arguments exactly once. 992c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 993c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Examples: 994c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 995c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_NE(5, Foo()); 996c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_EQ(NULL, a_pointer); 997c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// ASSERT_LT(i, array_size); 998c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// ASSERT_GT(records.size(), 0) << "There is no record left."; 999c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1000c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_EQ(expected, actual) \ 1001c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal:: \ 1002c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EqHelper<GTEST_IS_NULL_LITERAL(expected)>::Compare, \ 1003c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott expected, actual) 1004c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_NE(expected, actual) \ 1005c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) 1006c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_LE(val1, val2) \ 1007c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 1008c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_LT(val1, val2) \ 1009c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 1010c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_GE(val1, val2) \ 1011c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 1012c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_GT(val1, val2) \ 1013c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 1014c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1015c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_EQ(expected, actual) \ 1016c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal:: \ 1017c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EqHelper<GTEST_IS_NULL_LITERAL(expected)>::Compare, \ 1018c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott expected, actual) 1019c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_NE(val1, val2) \ 1020c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 1021c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_LE(val1, val2) \ 1022c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 1023c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_LT(val1, val2) \ 1024c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 1025c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_GE(val1, val2) \ 1026c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 1027c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_GT(val1, val2) \ 1028c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 1029c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1030c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// C String Comparisons. All tests treat NULL and any non-NULL string 1031c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// as different. Two NULLs are equal. 1032c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1033c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 1034c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 1035c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case 1036c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case 1037c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1038c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// For wide or narrow string objects, you can use the 1039c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// {ASSERT|EXPECT}_??() macros. 1040c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1041c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Don't depend on the order in which the arguments are evaluated, 1042c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// which is undefined. 1043c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1044c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// These macros evaluate their arguments exactly once. 1045c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1046c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_STREQ(expected, actual) \ 1047c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) 1048c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_STRNE(s1, s2) \ 1049c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 1050c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_STRCASEEQ(expected, actual) \ 1051c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) 1052c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_STRCASENE(s1, s2)\ 1053c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 1054c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1055c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_STREQ(expected, actual) \ 1056c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) 1057c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_STRNE(s1, s2) \ 1058c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 1059c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_STRCASEEQ(expected, actual) \ 1060c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) 1061c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_STRCASENE(s1, s2)\ 1062c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 1063c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1064c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Macros for comparing floating-point numbers. 1065c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1066c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): 1067c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Tests that two float values are almost equal. 1068c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): 1069c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Tests that two double values are almost equal. 1070c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): 1071c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Tests that v1 and v2 are within the given distance to each other. 1072c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1073c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Google Test uses ULP-based comparison to automatically pick a default 1074c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// error bound that is appropriate for the operands. See the 1075c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// FloatingPoint template class in gtest-internal.h if you are 1076c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// interested in the implementation details. 1077c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1078c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_FLOAT_EQ(expected, actual)\ 1079c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 1080c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott expected, actual) 1081c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1082c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_DOUBLE_EQ(expected, actual)\ 1083c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 1084c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott expected, actual) 1085c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1086c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_FLOAT_EQ(expected, actual)\ 1087c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 1088c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott expected, actual) 1089c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1090c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_DOUBLE_EQ(expected, actual)\ 1091c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 1092c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott expected, actual) 1093c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1094c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_NEAR(val1, val2, abs_error)\ 1095c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 1096c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott val1, val2, abs_error) 1097c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1098c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_NEAR(val1, val2, abs_error)\ 1099c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 1100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott val1, val2, abs_error) 1101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// These predicate format functions work on floating-point values, and 1103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. 1104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); 1106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Asserts that val1 is less than, or almost equal to, val2. Fails 1108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// otherwise. In particular, it fails if either val1 or val2 is NaN. 1109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult FloatLE(const char* expr1, const char* expr2, 1110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott float val1, float val2); 1111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottAssertionResult DoubleLE(const char* expr1, const char* expr2, 1112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott double val1, double val2); 1113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifdef GTEST_OS_WINDOWS 1116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Macros that test for HRESULT failure and success, these are only useful 1118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// on Windows, and rely on Windows SDK macros and APIs to compile. 1119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) 1121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// When expr unexpectedly fails or succeeds, Google Test prints the expected result 1123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// and the actual result with both a human-readable string representation of 1124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// the error, if available, as well as the hex result code. 1125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_HRESULT_SUCCEEDED(expr) \ 1126c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 1127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1128c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_HRESULT_SUCCEEDED(expr) \ 1129c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 1130c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1131c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define EXPECT_HRESULT_FAILED(expr) \ 1132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 1133c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1134c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define ASSERT_HRESULT_FAILED(expr) \ 1135c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 1136c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1137c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // GTEST_OS_WINDOWS 1138c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1139c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1140c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Causes a trace (including the source file path, the current line 1141c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// number, and the given message) to be included in every test failure 1142c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// message generated by code in the current scope. The effect is 1143c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// undone when the control leaves the current scope. 1144c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1145c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The message argument can be anything streamable to std::ostream. 1146c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1147c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// In the implementation, we include the current line number as part 1148c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s 1149c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// to appear in the same block - as long as they are on different 1150c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// lines. 1151c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define SCOPED_TRACE(message) \ 1152c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN(gtest_trace_, __LINE__)(\ 1153c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott __FILE__, __LINE__, ::testing::Message() << (message)) 1154c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1155c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1156c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Defines a test. 1157c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1158c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The first parameter is the name of the test case, and the second 1159c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// parameter is the name of the test within the test case. 1160c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1161c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The convention is to end the test case name with "Test". For 1162c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// example, a test case for the Foo class can be named FooTest. 1163c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1164c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The user should put his test code between braces after using this 1165c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// macro. Example: 1166c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1167c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// TEST(FooTest, InitializesCorrectly) { 1168c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Foo foo; 1169c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_TRUE(foo.StatusIsOK()); 1170c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// } 1171c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1172c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define TEST(test_case_name, test_name)\ 1173c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_TEST(test_case_name, test_name, ::testing::Test) 1174c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1175c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1176c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Defines a test that uses a test fixture. 1177c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1178c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The first parameter is the name of the test fixture class, which 1179c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// also doubles as the test case name. The second parameter is the 1180c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// name of the test within the test case. 1181c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1182c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// A test fixture class must be declared earlier. The user should put 1183c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// his test code between braces after using this macro. Example: 1184c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1185c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// class FooTest : public testing::Test { 1186c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// protected: 1187c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// virtual void SetUp() { b_.AddElement(3); } 1188c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1189c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Foo a_; 1190c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Foo b_; 1191c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// }; 1192c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1193c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// TEST_F(FooTest, InitializesCorrectly) { 1194c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_TRUE(a_.StatusIsOK()); 1195c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// } 1196c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1197c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// TEST_F(FooTest, ReturnsElementCountCorrectly) { 1198c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_EQ(0, a_.size()); 1199c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// EXPECT_EQ(1, b_.size()); 1200c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// } 1201c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1202c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define TEST_F(test_fixture, test_name)\ 1203c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott GTEST_TEST(test_fixture, test_name, test_fixture) 1204c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1205c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use this macro in main() to run all tests. It returns 0 if all 1206c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// tests are successful, or 1 otherwise. 1207c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 1208c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// RUN_ALL_TESTS() should be invoked after the command line has been 1209c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// parsed by InitGoogleTest(). 1210c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1211c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define RUN_ALL_TESTS()\ 1212c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (::testing::UnitTest::GetInstance()->Run()) 1213c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1214c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace testing 1215c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1216c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // GTEST_INCLUDE_GTEST_GTEST_H_ 1217