gtest.h revision b33f8e3e55932d0e15a686ef0c598da8dbc37acd
17ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Copyright 2005, Google Inc. 27ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// All rights reserved. 37ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 47ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Redistribution and use in source and binary forms, with or without 57ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// modification, are permitted provided that the following conditions are 67ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// met: 77ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 87ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Redistributions of source code must retain the above copyright 97ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// notice, this list of conditions and the following disclaimer. 107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Redistributions in binary form must reproduce the above 117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// copyright notice, this list of conditions and the following disclaimer 127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// in the documentation and/or other materials provided with the 137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// distribution. 147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Neither the name of Google Inc. nor the names of its 157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// contributors may be used to endorse or promote products derived from 167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this software without specific prior written permission. 177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Author: wan@google.com (Zhanyong Wan) 317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The Google C++ Testing Framework (Google Test) 337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This header file defines the public API for Google Test. It should be 357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// included by any test program that uses Google Test. 367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// IMPORTANT NOTE: Due to limitation of the C++ language, we have to 387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// leave some internal implementation details in this header file. 397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// They are clearly marked by comments like this: 407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Such code is NOT meant to be used by a user directly, and is subject 447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user 457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// program! 467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Acknowledgment: Google Test borrowed the idea of automatic test 487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// registration from Barthelemy Dagenais' (barthelemy@prologique.com) 497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// easyUnit framework. 507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_INCLUDE_GTEST_GTEST_H_ 537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <limits> 5557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#include <vector> 5657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 57b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/internal/gtest-internal.h" 58b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/internal/gtest-string.h" 59b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest-death-test.h" 60b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest-message.h" 61b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest-param-test.h" 62b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest-printers.h" 63b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest_prod.h" 64b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest-test-part.h" 65b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest-typed-test.h" 667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Depending on the platform, different string classes are available. 6857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// On Linux, in addition to ::std::string, Google also makes use of 6957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// class ::string, which has the same interface as ::std::string, but 7057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// has a different implementation. 7157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 7257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that 7357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// ::string is available AND is a distinct type to ::std::string, or 7457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// define it to 0 to indicate otherwise. 757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// If the user's ::std::string and ::string are the same class due to 7757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0. 787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 7957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined 8057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// heuristically. 817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace testing { 837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 84e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// Declares the flags. 857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 86e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag temporary enables the disabled tests. 87e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(also_run_disabled_tests); 88e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 89e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag brings the debugger on an assertion failure. 90e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(break_on_failure); 91e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 92e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag controls whether Google Test catches all test-thrown exceptions 93e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// and logs them as failures. 94e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(catch_exceptions); 95e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 96e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag enables using colors in terminal output. Available values are 97e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// "yes" to enable colors, "no" (disable colors), or "auto" (the default) 98e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// to let Google Test decide. 99e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_string_(color); 100e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 101e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag sets up the filter to select by name using a glob pattern 102e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// the tests to run. If the filter is not given all tests are executed. 103e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_string_(filter); 104e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 105e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag causes the Google Test to list tests. None of the tests listed 106e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// are actually run if the flag is provided. 107e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(list_tests); 108e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 109e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag controls whether Google Test emits a detailed XML report to a file 110e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// in addition to its normal textual output. 111e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_string_(output); 112e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 113e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flags control whether Google Test prints the elapsed time for each 114e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// test. 115e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(print_time); 116e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 117190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// This flag specifies the random number seed. 118190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin KramerGTEST_DECLARE_int32_(random_seed); 119190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 120e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag sets how many times the tests are repeated. The default value 121e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// is 1. If the value is -1 the tests are repeating forever. 122e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_int32_(repeat); 1237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This flag controls whether Google Test includes Google Test internal 1257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// stack frames in failure stack traces. 1267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanGTEST_DECLARE_bool_(show_internal_stack_frames); 1277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 128190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// When this flag is specified, tests' order is randomized on every iteration. 129190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin KramerGTEST_DECLARE_bool_(shuffle); 130190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 131e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag specifies the maximum number of stack frames to be 132e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// printed in a failure message. 133e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_int32_(stack_trace_depth); 134e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 135e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// When this flag is specified, a failed assertion will throw an 136e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// exception if exceptions are enabled, or exit the program with a 137e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// non-zero code otherwise. 138e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(throw_on_failure); 139e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 140b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// When this flag is set with a "host:port" string, on supported 141b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// platforms test results are streamed to the specified port on 142b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// the specified host machine. 143b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay FoadGTEST_DECLARE_string_(stream_result_to); 144b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 145e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// The upper limit for valid stack trace depths. 146e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramerconst int kMaxStackTraceDepth = 100; 147e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 1487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal { 1497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 150190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass AssertHelper; 151190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass DefaultGlobalTestPartResultReporter; 152190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass ExecDeathTest; 153190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass NoExecDeathTest; 154190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass FinalSuccessChecker; 1557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass GTestFlagSaver; 156190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestResultAccessor; 157190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestEventListenersAccessor; 158190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestEventRepeater; 159190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass WindowsDeathTest; 160190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass UnitTestImpl* GetUnitTestImpl(); 161190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramervoid ReportFailureInUnknownLocation(TestPartResult::Type result_type, 162190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const String& message); 1637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Converts a streamable value to a String. A NULL pointer is 1657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// converted to "(null)". When the input value is a ::string, 1667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ::std::string, ::wstring, or ::std::wstring object, each NUL 1677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// character in it is replaced with "\\0". 1687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Declared in gtest-internal.h but defined here, so that it has access 1697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// to the definition of the Message class, required by the ARM 1707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// compiler. 1717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T> 1727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanString StreamableToString(const T& streamable) { 1737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (Message() << streamable).GetString(); 1747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 1757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace internal 1777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 178b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// The friend relationship of some of these classes is cyclic. 179b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// If we don't forward declare them the compiler might confuse the classes 180b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// in friendship clauses with same named classes on the scope. 181b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadclass Test; 182b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadclass TestCase; 183b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadclass TestInfo; 184b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadclass UnitTest; 185b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 1867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A class for indicating whether an assertion was successful. When 1877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// the assertion wasn't successful, the AssertionResult object 18857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// remembers a non-empty message that describes how it failed. 1897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// To create an instance of this class, use one of the factory functions 1917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (AssertionSuccess() and AssertionFailure()). 1927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// This class is useful for two purposes: 19457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 1. Defining predicate functions to be used with Boolean test assertions 19557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts 19657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 2. Defining predicate-format functions to be 19757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). 19857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 19957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// For example, if you define IsEven predicate: 20057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 20157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// testing::AssertionResult IsEven(int n) { 20257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// if ((n % 2) == 0) 20357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionSuccess(); 20457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// else 20557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionFailure() << n << " is odd"; 20657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// } 20757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 20857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) 20957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// will print the message 21057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 21157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Value of: IsEven(Fib(5)) 21257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Actual: false (5 is odd) 21357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Expected: true 21457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 21557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// instead of a more opaque 21657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 21757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Value of: IsEven(Fib(5)) 21857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Actual: false 21957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Expected: true 22057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 22157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// in case IsEven is a simple Boolean predicate. 22257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 22357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// If you expect your predicate to be reused and want to support informative 22457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up 22557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// about half as often as positive ones in our tests), supply messages for 22657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// both success and failure cases: 22757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 22857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// testing::AssertionResult IsEven(int n) { 22957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// if ((n % 2) == 0) 23057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionSuccess() << n << " is even"; 23157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// else 23257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionFailure() << n << " is odd"; 23357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// } 23457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 23557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print 23657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 23757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Value of: IsEven(Fib(6)) 23857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Actual: true (8 is even) 23957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Expected: false 24057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 24157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// NB: Predicates that support negative Boolean assertions have reduced 24257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// performance in positive ones so be careful not to use them in tests 24357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// that have lots (tens of thousands) of positive Boolean assertions. 24457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 24557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// To use this class with EXPECT_PRED_FORMAT assertions such as: 2467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Verifies that Foo() returns an even number. 2487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_PRED_FORMAT1(IsEven, Foo()); 2497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 25057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// you need to define: 2517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// testing::AssertionResult IsEven(const char* expr, int n) { 25357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// if ((n % 2) == 0) 25457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionSuccess(); 25557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// else 25657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionFailure() 25757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// << "Expected: " << expr << " is even\n Actual: it's " << n; 2587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 2597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// If Foo() returns 5, you will see the following message: 2617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Expected: Foo() is even 2637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Actual: it's 5 26457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 26557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ AssertionResult { 2667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 26757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Copy constructor. 26857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Used in EXPECT_TRUE/FALSE(assertion_result). 26957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer AssertionResult(const AssertionResult& other); 27057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Used in the EXPECT_TRUE/FALSE(bool_expression). 27157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer explicit AssertionResult(bool success) : success_(success) {} 2727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns true iff the assertion succeeded. 27457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer operator bool() const { return success_; } // NOLINT 27557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 27657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. 27757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer AssertionResult operator!() const; 27857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 27957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Returns the text streamed into this AssertionResult. Test assertions 28057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // use it when they fail (i.e., the predicate's outcome doesn't match the 28157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // assertion's expectation). When nothing has been streamed into the 28257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // object, returns an empty string. 28357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* message() const { 284b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return message_.get() != NULL ? message_->c_str() : ""; 28557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer } 28657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // TODO(vladl@google.com): Remove this after making sure no clients use it. 28757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Deprecated; please use message() instead. 28857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* failure_message() const { return message(); } 2897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 29057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Streams a custom failure message into this object. 291b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad template <typename T> AssertionResult& operator<<(const T& value) { 292b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad AppendMessage(Message() << value); 293b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return *this; 294b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 295b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 296b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Allows streaming basic output manipulators such as endl or flush into 297b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // this object. 298b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad AssertionResult& operator<<( 299b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) { 300b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad AppendMessage(Message() << basic_manipulator); 301b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return *this; 302b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 3037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 305b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Appends the contents of message to message_. 306b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad void AppendMessage(const Message& a_message) { 307b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad if (message_.get() == NULL) 308b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad message_.reset(new ::std::string); 309b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad message_->append(a_message.GetString().c_str()); 310b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 31157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 31257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Stores result of the assertion predicate. 31357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer bool success_; 31457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Stores the message describing the condition in case the expectation 31557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // construct is not satisfied with the predicate's outcome. 31657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Referenced via a pointer to avoid taking too much stack frame space 31757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // with test assertions. 318b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad internal::scoped_ptr< ::std::string> message_; 31957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 320b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad GTEST_DISALLOW_ASSIGN_(AssertionResult); 321b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad}; 3227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Makes a successful assertion result. 32457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult AssertionSuccess(); 32557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 32657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Makes a failed assertion result. 32757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult AssertionFailure(); 3287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Makes a failed assertion result with the given failure message. 33057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Deprecated; use AssertionFailure() << msg. 33157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult AssertionFailure(const Message& msg); 3327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The abstract class that all tests inherit from. 3347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// In Google Test, a unit test program contains one or many TestCases, and 3367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// each TestCase contains one or many Tests. 3377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// When you define a test using the TEST macro, you don't need to 3397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// explicitly derive from Test - the TEST macro automatically does 3407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this for you. 3417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The only time you derive from Test is when defining a test fixture 3437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// to be used a TEST_F. For example: 3447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// class FooTest : public testing::Test { 3467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// protected: 3477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual void SetUp() { ... } 3487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual void TearDown() { ... } 3497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ... 3507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// }; 3517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST_F(FooTest, Bar) { ... } 3537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST_F(FooTest, Baz) { ... } 3547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Test is not copyable. 35657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ Test { 3577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 358b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad friend class TestInfo; 3597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Defines types for pointers to functions that set up and tear down 3617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // a test case. 3627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; 3637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; 3647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // The d'tor is virtual as we intend to inherit from Test. 3667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Test(); 3677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Sets up the stuff shared by all tests in this test case. 3697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 3707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Google Test will call Foo::SetUpTestCase() before running the first 3717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // test in test case Foo. Hence a sub-class can define its own 3727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // SetUpTestCase() method to shadow the one defined in the super 3737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // class. 3747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static void SetUpTestCase() {} 3757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Tears down the stuff shared by all tests in this test case. 3777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 3787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Google Test will call Foo::TearDownTestCase() after running the last 3797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // test in test case Foo. Hence a sub-class can define its own 3807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // TearDownTestCase() method to shadow the one defined in the super 3817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // class. 3827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static void TearDownTestCase() {} 3837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns true iff the current test has a fatal failure. 3857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static bool HasFatalFailure(); 3867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 387190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the current test has a non-fatal failure. 388190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static bool HasNonfatalFailure(); 389190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 390190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the current test has a (either fatal or 391190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // non-fatal) failure. 392190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } 393190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Logs a property for the current test. Only the last value for a given 3957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // key is remembered. 3967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // These are public static so they can be called from utility functions 3977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // that are not members of the test fixture. 3987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // The arguments are const char* instead strings, as Google Test is used 3997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // on platforms where string doesn't compile. 4007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Note that a driving consideration for these RecordProperty methods 4027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // was to produce xml output suited to the Greenspan charting utility, 4037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // which at present will only chart values that fit in a 32-bit int. It 4047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // is the user's responsibility to restrict their values to 32-bit ints 4057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // if they intend them to be used with Greenspan. 4067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static void RecordProperty(const char* key, const char* value); 4077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static void RecordProperty(const char* key, int value); 4087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman protected: 4107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Creates a Test object. 4117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Test(); 4127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Sets up the test fixture. 4147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void SetUp(); 4157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Tears down the test fixture. 4177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void TearDown(); 4187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns true iff the current test has the same fixture class as 4217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // the first test in the current test case. 4227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static bool HasSameFixtureClass(); 4237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Runs the test after the test fixture has been set up. 4257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // A sub-class must implement this to define the test logic. 4277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. 4297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Instead, use the TEST or TEST_F macro. 4307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void TestBody() = 0; 4317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Sets up, executes, and tears down the test. 4337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void Run(); 4347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 435b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Deletes self. We deliberately pick an unusual name for this 436b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // internal method to avoid clashing with names used in user TESTs. 437b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad void DeleteSelf_() { delete this; } 438b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 4397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Uses a GTestFlagSaver to save and restore all Google Test flags. 4407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const internal::GTestFlagSaver* const gtest_flag_saver_; 4417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Often a user mis-spells SetUp() as Setup() and spends a long time 4437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // wondering why it is never called by Google Test. The declaration of 4447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // the following method is solely for catching such an error at 4457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // compile time: 4467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // - The return type is deliberately chosen to be not void, so it 4487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // will be a conflict if a user declares void Setup() in his test 4497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // fixture. 4507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // - This method is private, so it will be another compiler error 4527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // if a user calls it from his test fixture. 4537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // DO NOT OVERRIDE THIS FUNCTION. 4557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // If you see an error about overriding the following function or 4577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // about it being private, you have mis-spelled SetUp() as Setup(). 4587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman struct Setup_should_be_spelled_SetUp {}; 4597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } 4607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We disallow copying Tests. 4627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); 4637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 4647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 465190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertypedef internal::TimeInMillis TimeInMillis; 466190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 467190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A copyable object representing a user specified test property which can be 468190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// output as a key/value string pair. 469190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 470190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// Don't inherit from TestProperty as its destructor is not virtual. 471190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestProperty { 472190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 473190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // C'tor. TestProperty does NOT have a default constructor. 474190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Always use this constructor (with parameters) to create a 475190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // TestProperty object. 47657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer TestProperty(const char* a_key, const char* a_value) : 47757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer key_(a_key), value_(a_value) { 478190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 479190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 480190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the user supplied key. 481190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* key() const { 482190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer return key_.c_str(); 483190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 484190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 485190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the user supplied value. 486190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* value() const { 487190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer return value_.c_str(); 488190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 489190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 490190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Sets a new value, overriding the one supplied in the constructor. 491190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void SetValue(const char* new_value) { 492190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer value_ = new_value; 493190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 494190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 495190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 496190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The key supplied by the user. 497190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::String key_; 498190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The value supplied by the user. 499190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::String value_; 500190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; 501190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 502190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// The result of a single Test. This includes a list of 503190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// TestPartResults, a list of TestProperties, a count of how many 504190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// death tests there are in the Test, and how much time it took to run 505190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// the Test. 506190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 507190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// TestResult is not copyable. 50857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ TestResult { 509190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 510190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Creates an empty TestResult. 511190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestResult(); 512190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 513190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // D'tor. Do not inherit from TestResult. 514190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer ~TestResult(); 515190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 516190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of all test parts. This is the sum of the number 517190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // of successful test parts and the number of failed test parts. 518190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int total_part_count() const; 519190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 520190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the number of the test properties. 521190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int test_property_count() const; 522190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 523190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test passed (i.e. no test part failed). 524190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Passed() const { return !Failed(); } 525190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 526190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test failed. 527190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Failed() const; 528190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 529190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test fatally failed. 530190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool HasFatalFailure() const; 531190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 532190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test has a non-fatal failure. 533190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool HasNonfatalFailure() const; 534190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 535190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the elapsed time, in milliseconds. 536190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TimeInMillis elapsed_time() const { return elapsed_time_; } 537190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 538190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the i-th test part result among all the results. i can range 539190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // from 0 to test_property_count() - 1. If i is not in that range, aborts 540190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // the program. 541190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const TestPartResult& GetTestPartResult(int i) const; 542190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 543190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the i-th test property. i can range from 0 to 544190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // test_property_count() - 1. If i is not in that range, aborts the 545190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // program. 546190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const TestProperty& GetTestProperty(int i) const; 547190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 548190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 549190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class TestInfo; 550190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class UnitTest; 551190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::DefaultGlobalTestPartResultReporter; 552190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::ExecDeathTest; 553190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::TestResultAccessor; 554190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::UnitTestImpl; 555190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::WindowsDeathTest; 556190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 557190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the vector of TestPartResults. 55857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const std::vector<TestPartResult>& test_part_results() const { 55957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return test_part_results_; 560190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 561190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 562190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the vector of TestProperties. 56357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const std::vector<TestProperty>& test_properties() const { 56457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return test_properties_; 565190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 566190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 567190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Sets the elapsed time. 568190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } 569190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 570190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a test property to the list. The property is validated and may add 571190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // a non-fatal failure if invalid (e.g., if it conflicts with reserved 572190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // key names). If a property is already recorded for the same key, the 573190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // value will be updated, rather than storing multiple values for the same 574190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // key. 575190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void RecordProperty(const TestProperty& test_property); 576190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 577190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a failure if the key is a reserved attribute of Google Test 578190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // testcase tags. Returns true if the property is valid. 579190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // TODO(russr): Validate attribute names are legal and human readable. 580190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static bool ValidateTestProperty(const TestProperty& test_property); 581190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 582190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a test part result to the list. 583190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void AddTestPartResult(const TestPartResult& test_part_result); 584190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 585190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the death test count. 586190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int death_test_count() const { return death_test_count_; } 587190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 588190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Increments the death test count, returning the new count. 589190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int increment_death_test_count() { return ++death_test_count_; } 590190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 591190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Clears the test part results. 592190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void ClearTestPartResults(); 593190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 594190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Clears the object. 595190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void Clear(); 596190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 597190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Protects mutable state of the property vector and of owned 598190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // properties, whose values may be updated. 599190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::Mutex test_properites_mutex_; 600190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 601190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The vector of TestPartResults 60257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer std::vector<TestPartResult> test_part_results_; 603190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The vector of TestProperties 60457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer std::vector<TestProperty> test_properties_; 605190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Running count of death tests. 606190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int death_test_count_; 607190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The elapsed time, in milliseconds. 608190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TimeInMillis elapsed_time_; 609190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 610190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // We disallow copying TestResult. 611190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); 612190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class TestResult 6137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A TestInfo object stores the following information about a test: 6157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 6167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Test case name 6177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Test name 6187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Whether the test should be run 6197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A function pointer that creates the test object when invoked 6207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Test result 6217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 6227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The constructor of TestInfo registers itself with the UnitTest 6237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// singleton such that the RUN_ALL_TESTS() macro knows which tests to 6247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// run. 62557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ TestInfo { 6267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 6277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Destructs a TestInfo object. This function is not virtual, so 6287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // don't inherit from TestInfo. 6297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ~TestInfo(); 6307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the test case name. 632b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* test_case_name() const { return test_case_name_.c_str(); } 6337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the test name. 635b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* name() const { return name_.c_str(); } 6367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 637b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Returns the name of the parameter type, or NULL if this is not a typed 638b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // or a type-parameterized test. 639b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* type_param() const { 640b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad if (type_param_.get() != NULL) 641b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return type_param_->c_str(); 642b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return NULL; 643b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 6447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 645b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Returns the text representation of the value parameter, or NULL if this 646b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // is not a value-parameterized test. 647b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* value_param() const { 648b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad if (value_param_.get() != NULL) 649b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return value_param_->c_str(); 650b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return NULL; 651b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 6527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 653190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true if this test should run, that is if the test is not disabled 654190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // (or it is disabled but the also_run_disabled_tests flag has been specified) 655190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // and its full name matches the user-specified filter. 6567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 6577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Google Test allows the user to filter the tests by their full names. 6587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // The full name of a test Bar in test case Foo is defined as 6597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // "Foo.Bar". Only the tests that match the filter will run. 6607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 6617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // A filter is a colon-separated list of glob (not regex) patterns, 6627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // optionally followed by a '-' and a colon-separated list of 6637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // negative patterns (tests to exclude). A test is run if it 6647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // matches one of the positive patterns and does not match any of 6657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // the negative patterns. 6667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 6677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // For example, *A*:Foo.* is a filter that matches any string that 6687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // contains the character 'A' or starts with "Foo.". 669b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad bool should_run() const { return should_run_; } 6707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the result of the test. 672b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const TestResult* result() const { return &result_; } 673190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 6747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 675b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 676e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#if GTEST_HAS_DEATH_TEST 6777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend class internal::DefaultDeathTestFactory; 6787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_DEATH_TEST 6797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend class Test; 6807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend class TestCase; 681190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::UnitTestImpl; 6827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend TestInfo* internal::MakeAndRegisterTestInfo( 6837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* test_case_name, const char* name, 684b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* type_param, 685b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* value_param, 6867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::TypeId fixture_class_id, 6877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Test::SetUpTestCaseFunc set_up_tc, 6887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Test::TearDownTestCaseFunc tear_down_tc, 6897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::TestFactoryBase* factory); 6907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Constructs a TestInfo object. The newly constructed instance assumes 6927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // ownership of the factory object. 6937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman TestInfo(const char* test_case_name, const char* name, 694b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* a_type_param, 695b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* a_value_param, 6967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::TypeId fixture_class_id, 6977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::TestFactoryBase* factory); 6987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 699b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Increments the number of death tests encountered in this test so 700b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // far. 701b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad int increment_death_test_count() { 702b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return result_.increment_death_test_count(); 703b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 704b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 705b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Creates the test object, runs it, records its result, and then 706b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // deletes it. 707b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad void Run(); 708b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 709b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad static void ClearTestResult(TestInfo* test_info) { 710b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad test_info->result_.Clear(); 711b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 712b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 713b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // These fields are immutable properties of the test. 714b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const std::string test_case_name_; // Test case name 715b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const std::string name_; // Test name 716b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Name of the parameter type, or NULL if this is not a typed or a 717b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // type-parameterized test. 718b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const internal::scoped_ptr<const ::std::string> type_param_; 719b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Text representation of the value parameter, or NULL if this is not a 720b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // value-parameterized test. 721b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const internal::scoped_ptr<const ::std::string> value_param_; 722b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const internal::TypeId fixture_class_id_; // ID of the test fixture class 723b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad bool should_run_; // True iff this test should run 724b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad bool is_disabled_; // True iff this test is disabled 725b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad bool matches_filter_; // True if this test matches the 726b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // user-specified filter. 727b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad internal::TestFactoryBase* const factory_; // The factory that creates 728b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // the test object 729b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 730b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // This field is mutable and needs to be reset before running the 731b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // test for the second time. 732b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad TestResult result_; 7337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 7347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); 7357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 7367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 737190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A test case, which consists of a vector of TestInfos. 738190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 739190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// TestCase is not copyable. 74057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ TestCase { 741190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 742190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Creates a TestCase with the given name. 743190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 744190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // TestCase does NOT have a default constructor. Always use this 745190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // constructor to create a TestCase object. 746190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 747190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Arguments: 748190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 749190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // name: name of the test case 750b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // a_type_param: the name of the test's type parameter, or NULL if 751b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // this is not a type-parameterized test. 752190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // set_up_tc: pointer to the function that sets up the test case 753190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // tear_down_tc: pointer to the function that tears down the test case 754b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad TestCase(const char* name, const char* a_type_param, 755190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer Test::SetUpTestCaseFunc set_up_tc, 756190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer Test::TearDownTestCaseFunc tear_down_tc); 757190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 758190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Destructor of TestCase. 759190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual ~TestCase(); 760190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 761190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the name of the TestCase. 762190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* name() const { return name_.c_str(); } 763190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 764b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Returns the name of the parameter type, or NULL if this is not a 765b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // type-parameterized test case. 766b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* type_param() const { 767b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad if (type_param_.get() != NULL) 768b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return type_param_->c_str(); 769b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return NULL; 770b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 771190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 772190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true if any test in this test case should run. 773190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool should_run() const { return should_run_; } 774190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 775190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of successful tests in this test case. 776190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int successful_test_count() const; 777190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 778190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of failed tests in this test case. 779190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int failed_test_count() const; 780190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 781190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of disabled tests in this test case. 782190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int disabled_test_count() const; 783190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 784190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Get the number of tests in this test case that should run. 785190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int test_to_run_count() const; 786190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 787190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of all tests in this test case. 788190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int total_test_count() const; 789190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 790190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test case passed. 791190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Passed() const { return !Failed(); } 792190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 793190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test case failed. 794190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Failed() const { return failed_test_count() > 0; } 795190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 796190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the elapsed time, in milliseconds. 797190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TimeInMillis elapsed_time() const { return elapsed_time_; } 798190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 799190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the i-th test among all the tests. i can range from 0 to 800190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // total_test_count() - 1. If i is not in that range, returns NULL. 801190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const TestInfo* GetTestInfo(int i) const; 802190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 803190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 804190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class Test; 805190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::UnitTestImpl; 806190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 807190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the (mutable) vector of TestInfos in this TestCase. 80857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer std::vector<TestInfo*>& test_info_list() { return test_info_list_; } 809190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 810190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the (immutable) vector of TestInfos in this TestCase. 81157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const std::vector<TestInfo*>& test_info_list() const { 81257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return test_info_list_; 813190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 814190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 815190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the i-th test among all the tests. i can range from 0 to 816190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // total_test_count() - 1. If i is not in that range, returns NULL. 817190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestInfo* GetMutableTestInfo(int i); 818190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 819190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Sets the should_run member. 820190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void set_should_run(bool should) { should_run_ = should; } 821190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 822190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a TestInfo to this test case. Will delete the TestInfo upon 823190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // destruction of the TestCase object. 824190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void AddTestInfo(TestInfo * test_info); 825190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 826190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Clears the results of all tests in this test case. 827190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void ClearResult(); 828190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 829190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Clears the results of all tests in the given test case. 830190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static void ClearTestCaseResult(TestCase* test_case) { 831190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer test_case->ClearResult(); 832190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 833190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 834190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Runs every test in this TestCase. 835190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void Run(); 836190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 837b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Runs SetUpTestCase() for this TestCase. This wrapper is needed 838b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // for catching exceptions thrown from SetUpTestCase(). 839b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad void RunSetUpTestCase() { (*set_up_tc_)(); } 840b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 841b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Runs TearDownTestCase() for this TestCase. This wrapper is 842b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // needed for catching exceptions thrown from TearDownTestCase(). 843b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad void RunTearDownTestCase() { (*tear_down_tc_)(); } 844b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 845190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff test passed. 846b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad static bool TestPassed(const TestInfo* test_info) { 847b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return test_info->should_run() && test_info->result()->Passed(); 848b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 849190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 850190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff test failed. 851b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad static bool TestFailed(const TestInfo* test_info) { 852b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return test_info->should_run() && test_info->result()->Failed(); 853b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 854190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 855190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff test is disabled. 856b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad static bool TestDisabled(const TestInfo* test_info) { 857b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return test_info->is_disabled_; 858b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 859190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 860190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true if the given test should run. 861b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad static bool ShouldRunTest(const TestInfo* test_info) { 862b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return test_info->should_run(); 863b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad } 864190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 865190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Shuffles the tests in this test case. 866190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void ShuffleTests(internal::Random* random); 867190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 868190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Restores the test order to before the first shuffle. 869190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void UnshuffleTests(); 870190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 871190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Name of the test case. 872190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::String name_; 873b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Name of the parameter type, or NULL if this is not a typed or a 874b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // type-parameterized test. 875b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const internal::scoped_ptr<const ::std::string> type_param_; 876190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The vector of TestInfos in their original order. It owns the 877190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // elements in the vector. 87857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer std::vector<TestInfo*> test_info_list_; 879190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Provides a level of indirection for the test list to allow easy 880190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // shuffling and restoring the test order. The i-th element in this 881190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // vector is the index of the i-th test in the shuffled test list. 88257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer std::vector<int> test_indices_; 883190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Pointer to the function that sets up the test case. 884190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer Test::SetUpTestCaseFunc set_up_tc_; 885190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Pointer to the function that tears down the test case. 886190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer Test::TearDownTestCaseFunc tear_down_tc_; 887190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // True iff any test in this test case should run. 888190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool should_run_; 889190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Elapsed time, in milliseconds. 890190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TimeInMillis elapsed_time_; 891190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 892190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // We disallow copying TestCases. 893190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); 894190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; 895190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 8967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// An Environment object is capable of setting up and tearing down an 8977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// environment. The user should subclass this to define his own 8987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// environment(s). 8997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 9007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// An Environment object does the set-up and tear-down in virtual 9017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// methods SetUp() and TearDown() instead of the constructor and the 9027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// destructor, as: 9037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 9047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 1. You cannot safely throw from a destructor. This is a problem 9057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// as in some cases Google Test is used where exceptions are enabled, and 9067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// we may want to implement ASSERT_* using exceptions where they are 9077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// available. 9087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2. You cannot use ASSERT_* directly in a constructor or 9097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// destructor. 9107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass Environment { 9117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 9127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // The d'tor is virtual as we need to subclass Environment. 9137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Environment() {} 9147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 9157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Override this to define how to set up the environment. 9167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void SetUp() {} 9177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 9187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Override this to define how to tear down the environment. 9197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void TearDown() {} 9207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 9217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // If you see an error about overriding the following function or 9227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // about it being private, you have mis-spelled SetUp() as Setup(). 9237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman struct Setup_should_be_spelled_SetUp {}; 9247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } 9257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 9267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 927190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// The interface for tracing execution of tests. The methods are organized in 928190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// the order the corresponding events are fired. 929190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestEventListener { 930190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 931190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual ~TestEventListener() {} 932190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 933190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before any test activity starts. 934190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestProgramStart(const UnitTest& unit_test) = 0; 935190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 936190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before each iteration of tests starts. There may be more than 937190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration 938190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // index, starting from 0. 939190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestIterationStart(const UnitTest& unit_test, 940190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int iteration) = 0; 941190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 942190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before environment set-up for each iteration of tests starts. 943190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0; 944190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 945190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after environment set-up for each iteration of tests ends. 946190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; 947190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 948190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before the test case starts. 949190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestCaseStart(const TestCase& test_case) = 0; 950190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 951190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before the test starts. 952190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestStart(const TestInfo& test_info) = 0; 953190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 954b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Fired after a failed assertion or a SUCCEED() invocation. 955190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0; 956190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 957190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after the test ends. 958190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestEnd(const TestInfo& test_info) = 0; 959190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 960190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after the test case ends. 961190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestCaseEnd(const TestCase& test_case) = 0; 962190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 963190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before environment tear-down for each iteration of tests starts. 964190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; 965190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 966190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after environment tear-down for each iteration of tests ends. 967190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; 968190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 969190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after each iteration of tests finishes. 970190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestIterationEnd(const UnitTest& unit_test, 971190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int iteration) = 0; 972190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 973190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after all test activities have ended. 974190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; 975190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; 976190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 977190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// The convenience class for users who need to override just one or two 978190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// methods and are not concerned that a possible change to a signature of 979190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// the methods they override will not be caught during the build. For 980190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// comments about each method please see the definition of TestEventListener 981190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// above. 982190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass EmptyTestEventListener : public TestEventListener { 983190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 984190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} 985190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, 986190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int /*iteration*/) {} 987190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} 988190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} 989190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} 990190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestStart(const TestInfo& /*test_info*/) {} 991190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} 992190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestEnd(const TestInfo& /*test_info*/) {} 993190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} 994190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} 995190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} 996190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, 997190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int /*iteration*/) {} 998190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} 999190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; 1000190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1001190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// TestEventListeners lets users add listeners to track events in Google Test. 100257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ TestEventListeners { 1003190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 1004190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListeners(); 1005190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer ~TestEventListeners(); 1006190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1007190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Appends an event listener to the end of the list. Google Test assumes 1008190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // the ownership of the listener (i.e. it will delete the listener when 1009190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // the test program finishes). 1010190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void Append(TestEventListener* listener); 1011190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1012190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Removes the given event listener from the list and returns it. It then 1013190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // becomes the caller's responsibility to delete the listener. Returns 1014190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // NULL if the listener is not found in the list. 1015190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* Release(TestEventListener* listener); 1016190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1017190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the standard listener responsible for the default console 1018190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // output. Can be removed from the listeners list to shut down default 1019190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // console output. Note that removing this object from the listener list 1020190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // with Release transfers its ownership to the caller and makes this 1021190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // function return NULL the next time. 1022190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* default_result_printer() const { 1023190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer return default_result_printer_; 1024190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 1025190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1026190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the standard listener responsible for the default XML output 1027190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // controlled by the --gtest_output=xml flag. Can be removed from the 1028190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // listeners list by users who want to shut down the default XML output 1029190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // controlled by this flag and substitute it with custom one. Note that 1030190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // removing this object from the listener list with Release transfers its 1031190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // ownership to the caller and makes this function return NULL the next 1032190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // time. 1033190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* default_xml_generator() const { 1034190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer return default_xml_generator_; 1035190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 1036190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1037190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 1038190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class TestCase; 1039b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad friend class TestInfo; 1040190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::DefaultGlobalTestPartResultReporter; 1041190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::NoExecDeathTest; 1042190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::TestEventListenersAccessor; 1043190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::UnitTestImpl; 1044190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1045190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns repeater that broadcasts the TestEventListener events to all 1046190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // subscribers. 1047190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* repeater(); 1048190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1049190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Sets the default_result_printer attribute to the provided listener. 1050190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The listener is also added to the listener list and previous 1051190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // default_result_printer is removed from it and deleted. The listener can 1052190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // also be NULL in which case it will not be added to the list. Does 1053190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // nothing if the previous and the current listener objects are the same. 1054190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void SetDefaultResultPrinter(TestEventListener* listener); 1055190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1056190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Sets the default_xml_generator attribute to the provided listener. The 1057190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // listener is also added to the listener list and previous 1058190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // default_xml_generator is removed from it and deleted. The listener can 1059190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // also be NULL in which case it will not be added to the list. Does 1060190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // nothing if the previous and the current listener objects are the same. 1061190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void SetDefaultXmlGenerator(TestEventListener* listener); 1062190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1063190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Controls whether events will be forwarded by the repeater to the 1064190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // listeners in the list. 1065190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool EventForwardingEnabled() const; 1066190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void SuppressEventForwarding(); 1067190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1068190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The actual list of listeners. 1069190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::TestEventRepeater* repeater_; 1070190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Listener responsible for the standard result output. 1071190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* default_result_printer_; 1072190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Listener responsible for the creation of the XML output file. 1073190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* default_xml_generator_; 1074190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1075190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // We disallow copying TestEventListeners. 1076190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); 1077190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; 1078190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1079190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A UnitTest consists of a vector of TestCases. 10807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 10817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This is a singleton class. The only instance of UnitTest is 10827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// created when UnitTest::GetInstance() is first called. This 10837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// instance is never deleted. 10847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 10857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// UnitTest is not copyable. 10867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 10877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This class is thread-safe as long as the methods are called 10887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// according to their specification. 108957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ UnitTest { 10907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 10917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Gets the singleton UnitTest object. The first time this method 10927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // is called, a UnitTest object is constructed and returned. 10937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Consecutive calls will return the same object. 10947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static UnitTest* GetInstance(); 10957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 10967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Runs all tests in this UnitTest object and prints the result. 10977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns 0 if successful, or 1 otherwise. 10987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 10997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // This method can only be called from the main thread. 11007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 11017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 11027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman int Run() GTEST_MUST_USE_RESULT_; 11037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the working directory when the first TEST() or TEST_F() 11057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // was executed. The UnitTest object owns the string. 11067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* original_working_dir() const; 11077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the TestCase object for the test that's currently running, 11097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // or NULL if no test is running. 11107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const TestCase* current_test_case() const; 11117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the TestInfo object for the test that's currently running, 11137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // or NULL if no test is running. 11147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const TestInfo* current_test_info() const; 11157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1116190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the random seed used at the start of the current test run. 1117190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int random_seed() const; 1118190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1119e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#if GTEST_HAS_PARAM_TEST 11207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the ParameterizedTestCaseRegistry object used to keep track of 11217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // value-parameterized tests and instantiate and register them. 1122190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 1123190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 11247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::ParameterizedTestCaseRegistry& parameterized_test_registry(); 11257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_PARAM_TEST 11267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1127190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of successful test cases. 1128190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int successful_test_case_count() const; 1129190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1130190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of failed test cases. 1131190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int failed_test_case_count() const; 1132190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1133190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of all test cases. 1134190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int total_test_case_count() const; 1135190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1136190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of all test cases that contain at least one test 1137190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // that should run. 1138190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int test_case_to_run_count() const; 1139190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1140190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of successful tests. 1141190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int successful_test_count() const; 1142190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1143190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of failed tests. 1144190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int failed_test_count() const; 1145190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1146190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of disabled tests. 1147190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int disabled_test_count() const; 1148190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1149190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of all tests. 1150190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int total_test_count() const; 1151190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1152190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of tests that should run. 1153190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int test_to_run_count() const; 1154190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1155190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the elapsed time, in milliseconds. 1156190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TimeInMillis elapsed_time() const; 1157190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1158190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the unit test passed (i.e. all test cases passed). 1159190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Passed() const; 1160190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1161190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the unit test failed (i.e. some test case failed 1162190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // or something outside of all tests failed). 1163190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Failed() const; 1164190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1165190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the i-th test case among all the test cases. i can range from 0 to 1166190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // total_test_case_count() - 1. If i is not in that range, returns NULL. 1167190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const TestCase* GetTestCase(int i) const; 1168190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1169190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the list of event listeners that can be used to track events 1170190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // inside Google Test. 1171190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListeners& listeners(); 1172190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1173190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 1174190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Registers and returns a global test environment. When a test 1175190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // program is run, all global test environments will be set-up in 1176190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // the order they were registered. After all tests in the program 1177190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // have finished, all global test environments will be torn-down in 1178190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // the *reverse* order they were registered. 1179190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 1180190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The UnitTest object takes ownership of the given environment. 1181190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 1182190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // This method can only be called from the main thread. 1183190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer Environment* AddEnvironment(Environment* env); 1184190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1185190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a TestPartResult to the current TestResult object. All 1186190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) 1187190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // eventually call this to report their results. The user code 1188190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // should use the assertion macros instead of calling this directly. 1189190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void AddTestPartResult(TestPartResult::Type result_type, 1190190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* file_name, 1191190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int line_number, 1192190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const internal::String& message, 1193190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const internal::String& os_stack_trace); 1194190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1195190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a TestProperty to the current TestResult object. If the result already 1196190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // contains a property with the same key, the value will be updated. 1197190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void RecordPropertyForCurrentTest(const char* key, const char* value); 1198190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1199190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the i-th test case among all the test cases. i can range from 0 to 1200190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // total_test_case_count() - 1. If i is not in that range, returns NULL. 1201190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestCase* GetMutableTestCase(int i); 1202190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 12037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Accessors for the implementation object. 12047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::UnitTestImpl* impl() { return impl_; } 12057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const internal::UnitTestImpl* impl() const { return impl_; } 1206190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1207190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // These classes and funcions are friends as they need to access private 1208190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // members of UnitTest. 1209190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class Test; 1210190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::AssertHelper; 12117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend class internal::ScopedTrace; 1212190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend Environment* AddGlobalTestEnvironment(Environment* env); 1213190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend internal::UnitTestImpl* internal::GetUnitTestImpl(); 1214190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend void internal::ReportFailureInUnknownLocation( 1215190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestPartResult::Type result_type, 1216190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const internal::String& message); 12177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Creates an empty UnitTest. 12197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman UnitTest(); 12207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // D'tor 12227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~UnitTest(); 12237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Pushes a trace defined by SCOPED_TRACE() on to the per-thread 12257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Google Test trace stack. 12267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void PushGTestTrace(const internal::TraceInfo& trace); 12277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Pops a trace from the per-thread Google Test trace stack. 12297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void PopGTestTrace(); 12307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Protects mutable state in *impl_. This is mutable as some const 12327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // methods need to lock it too. 12337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman mutable internal::Mutex mutex_; 12347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Opaque implementation object. This field is never changed once 12367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // the object is constructed. We don't mark it as const here, as 12377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // doing so will cause a warning in the constructor of UnitTest. 12387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Mutable state in *impl_ is protected by mutex_. 12397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::UnitTestImpl* impl_; 12407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We disallow copying UnitTest. 12427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); 12437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 12447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A convenient wrapper for adding an environment for the test 12467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// program. 12477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 12487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// You should call this before RUN_ALL_TESTS() is called, probably in 12497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// main(). If you use gtest_main, you need to call this before main() 12507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// starts for it to take effect. For example, you can define a global 12517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// variable like this: 12527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 12537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// testing::Environment* const foo_env = 12547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// testing::AddGlobalTestEnvironment(new FooEnvironment); 12557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 12567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// However, we strongly recommend you to write your own main() and 12577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// call AddGlobalTestEnvironment() there, as relying on initialization 12587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// of global variables makes the code harder to read and may cause 12597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// problems when you register multiple environments from different 12607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// translation units and the environments have dependencies among them 12617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (remember that the compiler doesn't guarantee the order in which 12627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// global variables from different translation units are initialized). 12637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmaninline Environment* AddGlobalTestEnvironment(Environment* env) { 12647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return UnitTest::GetInstance()->AddEnvironment(env); 12657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 12667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Initializes Google Test. This must be called before calling 12687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// RUN_ALL_TESTS(). In particular, it parses a command line for the 12697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// flags that Google Test recognizes. Whenever a Google Test flag is 12707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// seen, it is removed from argv, and *argc is decremented. 12717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 12727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// No value is returned. Instead, the Google Test flag variables are 12737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// updated. 12747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 12757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Calling the function for the second time has no user-visible effect. 127657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ void InitGoogleTest(int* argc, char** argv); 12777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This overloaded version can be used in Windows programs compiled in 12797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// UNICODE mode. 128057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); 12817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal { 12837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) 12857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// operand to be used in a failure message. The type (but not value) 12867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// of the other operand may affect the format. This allows us to 12877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// print a char* as a raw pointer when it is compared against another 12887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// char*, and print it as a C string when it is compared against an 12897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// std::string object, for example. 12907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 12917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The default implementation ignores the type of the other operand. 12927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Some specialized versions are used to handle formatting wide or 12937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// narrow C strings. 12947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 12957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 12967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2> 12977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanString FormatForComparisonFailureMessage(const T1& value, 12987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& /* other_operand */) { 1299b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // C++Builder compiles this incorrectly if the namespace isn't explicitly 1300b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // given. 1301b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return ::testing::PrintToString(value); 13027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 13037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper function for {ASSERT|EXPECT}_EQ. 13057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2> 13067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult CmpHelperEQ(const char* expected_expression, 13077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* actual_expression, 13087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& expected, 13097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& actual) { 1310e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#ifdef _MSC_VER 1311b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# pragma warning(push) // Saves the current warning state. 1312b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# pragma warning(disable:4389) // Temporarily disables warning on 1313e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer // signed/unsigned mismatch. 13149bf9aa5106eb663a371b2b0bc7ab929500ad6ff9Oscar Fuentes#pragma warning(disable:4805) // Temporarily disables warning on 13159bf9aa5106eb663a371b2b0bc7ab929500ad6ff9Oscar Fuentes // unsafe mix of types 1316e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#endif 1317e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 13187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (expected == actual) { 13197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return AssertionSuccess(); 13207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 13217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1322e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#ifdef _MSC_VER 1323b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# pragma warning(pop) // Restores the warning state. 1324e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#endif 1325e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 13267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return EqFailure(expected_expression, 13277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual_expression, 13287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman FormatForComparisonFailureMessage(expected, actual), 13297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman FormatForComparisonFailureMessage(actual, expected), 13307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman false); 13317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 13327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// With this overloaded version, we allow anonymous enums to be used 13347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums 13357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// can be implicitly cast to BiggestInt. 133657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression, 133757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual_expression, 133857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer BiggestInt expected, 133957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer BiggestInt actual); 13407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper class for {ASSERT|EXPECT}_EQ. The template argument 13427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// lhs_is_null_literal is true iff the first argument to ASSERT_EQ() 13437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// is a null pointer literal. The following default implementation is 13447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// for lhs_is_null_literal being false. 13457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <bool lhs_is_null_literal> 13467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass EqHelper { 13477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 13487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // This templatized version is for the general case. 13497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2> 13507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static AssertionResult Compare(const char* expected_expression, 13517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* actual_expression, 13527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& expected, 13537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& actual) { 13547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return CmpHelperEQ(expected_expression, actual_expression, expected, 13557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual); 13567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 13577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // With this overloaded version, we allow anonymous enums to be used 13597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous 13607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // enums can be implicitly cast to BiggestInt. 13617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 13627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Even though its body looks the same as the above version, we 13637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // cannot merge the two, as it will make anonymous enums unhappy. 13647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static AssertionResult Compare(const char* expected_expression, 13657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* actual_expression, 13667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman BiggestInt expected, 13677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman BiggestInt actual) { 13687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return CmpHelperEQ(expected_expression, actual_expression, expected, 13697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual); 13707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 13717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 13727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This specialization is used when the first argument to ASSERT_EQ() 1374b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// is a null pointer literal, like NULL, false, or 0. 13757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <> 13767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass EqHelper<true> { 13777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 13787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We define two overloaded versions of Compare(). The first 13797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // version will be picked when the second argument to ASSERT_EQ() is 13807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or 13817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // EXPECT_EQ(false, a_bool). 13827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2> 1383b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad static AssertionResult Compare( 1384b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* expected_expression, 1385b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* actual_expression, 1386b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const T1& expected, 1387b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const T2& actual, 1388b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // The following line prevents this overload from being considered if T2 1389b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // is not a pointer type. We need this because ASSERT_EQ(NULL, my_ptr) 1390b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // expands to Compare("", "", NULL, my_ptr), which requires a conversion 1391b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // to match the Secret* in the other overload, which would otherwise make 1392b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // this template match better. 1393b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad typename EnableIf<!is_pointer<T2>::value>::type* = 0) { 13947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return CmpHelperEQ(expected_expression, actual_expression, expected, 13957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual); 13967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 13977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1398b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // This version will be picked when the second argument to ASSERT_EQ() is a 1399b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // pointer, e.g. ASSERT_EQ(NULL, a_pointer). 1400b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad template <typename T> 1401b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad static AssertionResult Compare( 1402b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* expected_expression, 1403b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad const char* actual_expression, 1404b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // We used to have a second template parameter instead of Secret*. That 1405b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // template parameter would deduce to 'long', making this a better match 1406b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // than the first overload even without the first overload's EnableIf. 1407b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // Unfortunately, gcc with -Wconversion-null warns when "passing NULL to 1408b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // non-pointer argument" (even a deduced integral argument), so the old 1409b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // implementation caused warnings in user code. 1410b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad Secret* /* expected (NULL) */, 1411b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad T* actual) { 14127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We already know that 'expected' is a null pointer. 14137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return CmpHelperEQ(expected_expression, actual_expression, 1414b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad static_cast<T*>(NULL), actual); 14157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 14167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 14177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A macro for implementing the helper functions needed to implement 14197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste 14207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// of similar code. 14217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// For each templatized helper function, we also define an overloaded 14237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// version for BiggestInt in order to reduce code bloat and allow 14247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled 14257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// with gcc 4. 14267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 14287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ 14297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2>\ 14307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 14317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& val1, const T2& val2) {\ 14327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (val1 op val2) {\ 14337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return AssertionSuccess();\ 14347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } else {\ 1435b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad return AssertionFailure() \ 1436b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad << "Expected: (" << expr1 << ") " #op " (" << expr2\ 14377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ 14387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << " vs " << FormatForComparisonFailureMessage(val2, val1);\ 14397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman }\ 14407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}\ 144157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelper##op_name(\ 144257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) 14437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 14457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements the helper function for {ASSERT|EXPECT}_NE 144757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_IMPL_CMP_HELPER_(NE, !=); 14487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements the helper function for {ASSERT|EXPECT}_LE 144957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_IMPL_CMP_HELPER_(LE, <=); 14507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements the helper function for {ASSERT|EXPECT}_LT 145157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_IMPL_CMP_HELPER_(LT, < ); 14527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements the helper function for {ASSERT|EXPECT}_GE 145357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_IMPL_CMP_HELPER_(GE, >=); 14547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements the helper function for {ASSERT|EXPECT}_GT 145557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_IMPL_CMP_HELPER_(GT, > ); 14567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#undef GTEST_IMPL_CMP_HELPER_ 14587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper function for {ASSERT|EXPECT}_STREQ. 14607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 146257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, 146357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual_expression, 146457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* expected, 146557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual); 14667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper function for {ASSERT|EXPECT}_STRCASEEQ. 14687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 147057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, 147157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual_expression, 147257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* expected, 147357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual); 14747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper function for {ASSERT|EXPECT}_STRNE. 14767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 147857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, 147957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s2_expression, 148057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s1, 148157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s2); 14827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper function for {ASSERT|EXPECT}_STRCASENE. 14847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 148657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, 148757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s2_expression, 148857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s1, 148957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s2); 14907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for *_STREQ on wide strings. 14937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 149557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, 149657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual_expression, 149757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const wchar_t* expected, 149857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const wchar_t* actual); 14997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for *_STRNE on wide strings. 15017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 15027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 150357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, 150457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s2_expression, 150557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const wchar_t* s1, 150657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const wchar_t* s2); 15077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace internal 15097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// IsSubstring() and IsNotSubstring() are intended to be used as the 15117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by 15127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// themselves. They check whether needle is a substring of haystack 15137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (NULL is considered a substring of itself only), and return an 15147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// appropriate error message when they fail. 15157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 15167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The {needle,haystack}_expr arguments are the stringified 15177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// expressions that generated the two real arguments. 151857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsSubstring( 15197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 15207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle, const char* haystack); 152157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsSubstring( 15227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 15237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const wchar_t* needle, const wchar_t* haystack); 152457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsNotSubstring( 15257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 15267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle, const char* haystack); 152757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsNotSubstring( 15287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 15297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const wchar_t* needle, const wchar_t* haystack); 153057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsSubstring( 15317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 15327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ::std::string& needle, const ::std::string& haystack); 153357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsNotSubstring( 15347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 15357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ::std::string& needle, const ::std::string& haystack); 15367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#if GTEST_HAS_STD_WSTRING 153857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsSubstring( 15397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 15407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ::std::wstring& needle, const ::std::wstring& haystack); 154157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsNotSubstring( 15427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 15437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ::std::wstring& needle, const ::std::wstring& haystack); 15447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_STD_WSTRING 15457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal { 15477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper template function for comparing floating-points. 15497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 15507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Template parameter: 15517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 15527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// RawType: the raw floating-point type (either float or double) 15537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 15547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 15557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename RawType> 15567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, 15577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* actual_expression, 15587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman RawType expected, 15597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman RawType actual) { 15607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const FloatingPoint<RawType> lhs(expected), rhs(actual); 15617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (lhs.AlmostEquals(rhs)) { 15637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return AssertionSuccess(); 15647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 15657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1566b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad ::std::stringstream expected_ss; 15677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 15687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << expected; 15697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1570b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad ::std::stringstream actual_ss; 15717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 15727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << actual; 15737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return EqFailure(expected_expression, 15757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual_expression, 1576b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad StringStreamToString(&expected_ss), 1577b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad StringStreamToString(&actual_ss), 15787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman false); 15797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 15807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for implementing ASSERT_NEAR. 15827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 15837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 158457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, 158557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* expr2, 158657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* abs_error_expr, 158757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer double val1, 158857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer double val2, 158957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer double abs_error); 15907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. 15927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A class that enables one to stream messages to assertion macros 159357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ AssertHelper { 15947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 15957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Constructor. 1596190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer AssertHelper(TestPartResult::Type type, 1597190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* file, 1598190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int line, 15997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* message); 1600190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer ~AssertHelper(); 1601190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 16027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Message assignment is a semantic trick to enable assertion 16037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // streaming; see the GTEST_MESSAGE_ macro below. 16047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void operator=(const Message& message) const; 1605190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 16067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1607190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // We put our data in a struct so that the size of the AssertHelper class can 1608190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // be as small as possible. This is important because gcc is incapable of 1609190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // re-using stack space even for temporary variables, so every EXPECT_EQ 1610190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // reserves stack space for another AssertHelper. 1611190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer struct AssertHelperData { 1612190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer AssertHelperData(TestPartResult::Type t, 1613190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* srcfile, 1614190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int line_num, 1615190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* msg) 1616190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer : type(t), file(srcfile), line(line_num), message(msg) { } 1617190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1618190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestPartResult::Type const type; 1619190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* const file; 1620190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int const line; 1621190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer String const message; 1622190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1623190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 1624190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); 1625190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; 1626190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1627190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer AssertHelperData* const data_; 16287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); 16307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 16317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace internal 16337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1634e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#if GTEST_HAS_PARAM_TEST 1635b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// The pure interface class that all value-parameterized tests inherit from. 1636b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// A value-parameterized class must inherit from both ::testing::Test and 1637b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// ::testing::WithParamInterface. In most cases that just means inheriting 1638b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// from ::testing::TestWithParam, but more complicated test hierarchies 1639b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// may need to inherit from Test and WithParamInterface at different levels. 16407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 1641b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// This interface has support for accessing the test parameter value via 16427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// the GetParam() method. 16437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 16447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Use it with one of the parameter generator defining functions, like Range(), 16457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Values(), ValuesIn(), Bool(), and Combine(). 16467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 16477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// class FooTest : public ::testing::TestWithParam<int> { 16487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// protected: 16497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// FooTest() { 16507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Can use GetParam() here. 16517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 16527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual ~FooTest() { 16537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Can use GetParam() here. 16547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 16557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual void SetUp() { 16567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Can use GetParam() here. 16577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 16587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual void TearDown { 16597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Can use GetParam() here. 16607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 16617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// }; 16627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST_P(FooTest, DoesBar) { 16637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Can use GetParam() method here. 16647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Foo foo; 16657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_TRUE(foo.DoesBar(GetParam())); 16667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 16677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); 16687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T> 1670b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadclass WithParamInterface { 16717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 16727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef T ParamType; 1673b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad virtual ~WithParamInterface() {} 16747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // The current parameter value. Is also available in the test fixture's 1676b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // constructor. This member function is non-static, even though it only 1677b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // references static data, to reduce the opportunity for incorrect uses 1678b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // like writing 'WithParamInterface<bool>::GetParam()' for a test that 1679b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // uses a fixture whose parameter type is int. 16807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamType& GetParam() const { return *parameter_; } 16817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 16837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Sets parameter value. The caller is responsible for making sure the value 16847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // remains alive and unchanged throughout the current test. 16857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static void SetParam(const ParamType* parameter) { 16867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman parameter_ = parameter; 16877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 16887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Static value used for accessing parameter during a test lifetime. 16907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static const ParamType* parameter_; 16917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1692b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad // TestClass must be a subclass of WithParamInterface<T> and Test. 16937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <class TestClass> friend class internal::ParameterizedTestFactory; 16947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 16957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T> 1697b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadconst T* WithParamInterface<T>::parameter_ = NULL; 1698b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 1699b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// Most value-parameterized classes can ignore the existence of 1700b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// WithParamInterface, and can just inherit from ::testing::TestWithParam. 1701b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 1702b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadtemplate <typename T> 1703b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foadclass TestWithParam : public Test, public WithParamInterface<T> { 1704b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad}; 17057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_PARAM_TEST 17077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros for indicating success/failure in test code. 17097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ADD_FAILURE unconditionally adds a failure to the current test. 17117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// SUCCEED generates a success - it doesn't automatically make the 17127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// current test successful, as a test is only successful when it has 17137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// no failure. 17147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_* verifies that a certain condition is satisfied. If not, 17167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// it behaves like ADD_FAILURE. In particular: 17177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_TRUE verifies that a Boolean condition is true. 17197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_FALSE verifies that a Boolean condition is false. 17207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except 17227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// that they will also abort the current function on failure. People 17237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// usually want the fail-fast behavior of FAIL and ASSERT_*, but those 17247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// writing data-driven tests often find themselves using ADD_FAILURE 17257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// and EXPECT_* more. 17267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Examples: 17287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_TRUE(server.StatusIsOK()); 17307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_FALSE(server.HasPendingRequest(port)) 17317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// << "There are still pending requests " << "on port " << port; 17327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Generates a nonfatal failure with a generic message. 17347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") 17357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1736b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// Generates a nonfatal failure at the given source file location with 1737b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// a generic message. 1738b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#define ADD_FAILURE_AT(file, line) \ 1739b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad GTEST_MESSAGE_AT_(file, line, "Failed", \ 1740b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad ::testing::TestPartResult::kNonFatalFailure) 1741b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 17427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Generates a fatal failure with a generic message. 174357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") 174457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 174557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Define this macro to 1 to omit the definition of FAIL(), which is a 174657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// generic name and clashes with some other libraries. 174757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#if !GTEST_DONT_DEFINE_FAIL 1748b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define FAIL() GTEST_FAIL() 174957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#endif 17507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Generates a success with a generic message. 175257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") 175357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 175457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Define this macro to 1 to omit the definition of SUCCEED(), which 175557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// is a generic name and clashes with some other libraries. 175657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#if !GTEST_DONT_DEFINE_SUCCEED 1757b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define SUCCEED() GTEST_SUCCEED() 175857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#endif 17597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros for testing exceptions. 17617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_THROW(statement, expected_exception): 17637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that the statement throws the expected exception. 17647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_NO_THROW(statement): 17657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that the statement doesn't throw any exception. 17667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_ANY_THROW(statement): 17677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that the statement throws an exception. 17687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_THROW(statement, expected_exception) \ 17707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) 17717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_NO_THROW(statement) \ 17727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) 17737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_ANY_THROW(statement) \ 17747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) 17757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_THROW(statement, expected_exception) \ 17767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) 17777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_NO_THROW(statement) \ 17787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) 17797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_ANY_THROW(statement) \ 17807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) 17817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 178257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Boolean assertions. Condition can be either a Boolean expression or an 178357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// AssertionResult. For more information on how to use AssertionResult with 178457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// these macros see comments on that class. 17857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_TRUE(condition) \ 17867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 17877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_NONFATAL_FAILURE_) 17887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_FALSE(condition) \ 17897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 17907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_NONFATAL_FAILURE_) 17917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_TRUE(condition) \ 17927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 17937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_FATAL_FAILURE_) 17947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_FALSE(condition) \ 17957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 17967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_FATAL_FAILURE_) 17977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Includes the auto-generated header that implements a family of 17997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// generic predicate assertion macros. 1800b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest_pred_impl.h" 18017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros for testing equalities and inequalities. 18037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual 18057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 18067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 18077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 18087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 18097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 18107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// When they are not, Google Test prints both the tested expressions and 18127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// their actual values. The values must be compatible built-in types, 18137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// or you will get a compiler error. By "compatible" we mean that the 18147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// values can be compared by the respective operator. 18157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Note: 18177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 1. It is possible to make a user-defined type work with 18197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// {ASSERT|EXPECT}_??(), but that requires overloading the 18207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// comparison operators and is thus discouraged by the Google C++ 18217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Usage Guide. Therefore, you are advised to use the 18227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// {ASSERT|EXPECT}_TRUE() macro to assert that two objects are 18237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// equal. 18247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on 18267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// pointers (in particular, C strings). Therefore, if you use it 18277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// with two C strings, you are testing how their locations in memory 18287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// are related, not how their content is related. To compare two C 18297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// strings by content, use {ASSERT|EXPECT}_STR*(). 18307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to 18327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you 18337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// what the actual value is when it fails, and similarly for the 18347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// other comparisons. 18357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 4. Do not depend on the order in which {ASSERT|EXPECT}_??() 18377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// evaluate their arguments, which is undefined. 18387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 5. These macros evaluate their arguments exactly once. 18407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Examples: 18427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_NE(5, Foo()); 18447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_EQ(NULL, a_pointer); 18457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_LT(i, array_size); 18467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_GT(records.size(), 0) << "There is no record left."; 18477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_EQ(expected, actual) \ 18497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal:: \ 18507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \ 18517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 18527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_NE(expected, actual) \ 18537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) 18547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_LE(val1, val2) \ 18557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 18567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_LT(val1, val2) \ 18577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 18587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_GE(val1, val2) \ 18597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 18607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_GT(val1, val2) \ 18617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 18627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1863b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#define GTEST_ASSERT_EQ(expected, actual) \ 18647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal:: \ 18657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \ 18667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 1867b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#define GTEST_ASSERT_NE(val1, val2) \ 18687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 1869b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#define GTEST_ASSERT_LE(val1, val2) \ 18707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 1871b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#define GTEST_ASSERT_LT(val1, val2) \ 18727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 1873b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#define GTEST_ASSERT_GE(val1, val2) \ 18747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 1875b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#define GTEST_ASSERT_GT(val1, val2) \ 18767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 18777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1878b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of 1879b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad// ASSERT_XY(), which clashes with some users' own code. 1880b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 1881b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#if !GTEST_DONT_DEFINE_ASSERT_EQ 1882b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) 1883b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#endif 1884b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 1885b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#if !GTEST_DONT_DEFINE_ASSERT_NE 1886b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) 1887b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#endif 1888b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 1889b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#if !GTEST_DONT_DEFINE_ASSERT_LE 1890b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) 1891b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#endif 1892b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 1893b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#if !GTEST_DONT_DEFINE_ASSERT_LT 1894b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) 1895b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#endif 1896b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 1897b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#if !GTEST_DONT_DEFINE_ASSERT_GE 1898b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) 1899b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#endif 1900b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 1901b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#if !GTEST_DONT_DEFINE_ASSERT_GT 1902b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) 1903b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#endif 1904b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad 19057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// C String Comparisons. All tests treat NULL and any non-NULL string 19067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// as different. Two NULLs are equal. 19077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 19097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 19107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case 19117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case 19127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// For wide or narrow string objects, you can use the 19147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// {ASSERT|EXPECT}_??() macros. 19157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Don't depend on the order in which the arguments are evaluated, 19177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// which is undefined. 19187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// These macros evaluate their arguments exactly once. 19207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_STREQ(expected, actual) \ 19227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) 19237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_STRNE(s1, s2) \ 19247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 19257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_STRCASEEQ(expected, actual) \ 19267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) 19277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_STRCASENE(s1, s2)\ 19287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 19297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_STREQ(expected, actual) \ 19317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) 19327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_STRNE(s1, s2) \ 19337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 19347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_STRCASEEQ(expected, actual) \ 19357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) 19367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_STRCASENE(s1, s2)\ 19377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 19387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros for comparing floating-point numbers. 19407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): 19427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that two float values are almost equal. 19437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): 19447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that two double values are almost equal. 19457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): 19467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that v1 and v2 are within the given distance to each other. 19477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Google Test uses ULP-based comparison to automatically pick a default 19497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// error bound that is appropriate for the operands. See the 19507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// FloatingPoint template class in gtest-internal.h if you are 19517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// interested in the implementation details. 19527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_FLOAT_EQ(expected, actual)\ 19547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 19557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 19567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_DOUBLE_EQ(expected, actual)\ 19587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 19597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 19607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_FLOAT_EQ(expected, actual)\ 19627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 19637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 19647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_DOUBLE_EQ(expected, actual)\ 19667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 19677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 19687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_NEAR(val1, val2, abs_error)\ 19707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 19717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman val1, val2, abs_error) 19727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_NEAR(val1, val2, abs_error)\ 19747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 19757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman val1, val2, abs_error) 19767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// These predicate format functions work on floating-point values, and 19787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. 19797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); 19817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Asserts that val1 is less than, or almost equal to, val2. Fails 19837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// otherwise. In particular, it fails if either val1 or val2 is NaN. 198457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, 198557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer float val1, float val2); 198657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, 198757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer double val1, double val2); 19887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1990e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#if GTEST_OS_WINDOWS 19917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros that test for HRESULT failure and success, these are only useful 19937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// on Windows, and rely on Windows SDK macros and APIs to compile. 19947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) 19967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// When expr unexpectedly fails or succeeds, Google Test prints the 19987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// expected result and the actual result with both a human-readable 19997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// string representation of the error, if available, as well as the 20007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// hex result code. 2001b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define EXPECT_HRESULT_SUCCEEDED(expr) \ 20027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 20037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2004b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define ASSERT_HRESULT_SUCCEEDED(expr) \ 20057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 20067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2007b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define EXPECT_HRESULT_FAILED(expr) \ 20087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 20097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2010b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define ASSERT_HRESULT_FAILED(expr) \ 20117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 20127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_OS_WINDOWS 20147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros that execute statement and check that it doesn't generate new fatal 20167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// failures in the current thread. 20177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); 20197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Examples: 20217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_NO_FATAL_FAILURE(Process()); 20237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; 20247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_NO_FATAL_FAILURE(statement) \ 20267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) 20277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_NO_FATAL_FAILURE(statement) \ 20287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) 20297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Causes a trace (including the source file path, the current line 20317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// number, and the given message) to be included in every test failure 20327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// message generated by code in the current scope. The effect is 20337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// undone when the control leaves the current scope. 20347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The message argument can be anything streamable to std::ostream. 20367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// In the implementation, we include the current line number as part 20387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s 20397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// to appear in the same block - as long as they are on different 20407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// lines. 20417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define SCOPED_TRACE(message) \ 20427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ 20437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman __FILE__, __LINE__, ::testing::Message() << (message)) 20447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2045e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// Compile-time assertion for type equality. 2046e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// StaticAssertTypeEq<type1, type2>() compiles iff type1 and type2 are 2047e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// the same type. The value it returns is not interesting. 2048e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 2049e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// Instead of making StaticAssertTypeEq a class template, we make it a 2050e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// function template that invokes a helper class template. This 2051e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// prevents a user from misusing StaticAssertTypeEq<T1, T2> by 2052e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// defining objects of that type. 2053e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 2054e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// CAVEAT: 2055e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 2056e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// When used inside a method of a class template, 2057e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// StaticAssertTypeEq<T1, T2>() is effective ONLY IF the method is 2058e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// instantiated. For example, given: 2059e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 2060e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// template <typename T> class Foo { 2061e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// public: 2062e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// void Bar() { testing::StaticAssertTypeEq<int, T>(); } 2063e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// }; 2064e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 2065e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// the code: 2066e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 2067e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// void Test1() { Foo<bool> foo; } 2068e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 2069e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// will NOT generate a compiler error, as Foo<bool>::Bar() is never 2070e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// actually instantiated. Instead, you need: 2071e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 2072e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// void Test2() { Foo<bool> foo; foo.Bar(); } 2073e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 2074e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// to cause a compiler error. 2075e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramertemplate <typename T1, typename T2> 2076e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramerbool StaticAssertTypeEq() { 2077b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad (void)internal::StaticAssertTypeEqHelper<T1, T2>(); 2078e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer return true; 2079e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer} 20807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Defines a test. 20827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The first parameter is the name of the test case, and the second 20847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// parameter is the name of the test within the test case. 20857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The convention is to end the test case name with "Test". For 20877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// example, a test case for the Foo class can be named FooTest. 20887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The user should put his test code between braces after using this 20907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// macro. Example: 20917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST(FooTest, InitializesCorrectly) { 20937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Foo foo; 20947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_TRUE(foo.StatusIsOK()); 20957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 20967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Note that we call GetTestTypeId() instead of GetTypeId< 20987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ::testing::Test>() here to get the type ID of testing::Test. This 20997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// is to work around a suspected linker bug when using Google Test as 21007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// a framework on Mac OS X. The bug causes GetTypeId< 21017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ::testing::Test>() to return different values depending on whether 21027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// the call is from the Google Test framework itself or from user test 21037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// code. GetTestTypeId() is guaranteed to always return the same 21047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// value, as it always calls GetTypeId<>() from the Google Test 21057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// framework. 210657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#define GTEST_TEST(test_case_name, test_name)\ 2107e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer GTEST_TEST_(test_case_name, test_name, \ 21087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ::testing::Test, ::testing::internal::GetTestTypeId()) 21097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 211057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Define this macro to 1 to omit the definition of TEST(), which 211157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// is a generic name and clashes with some other libraries. 211257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#if !GTEST_DONT_DEFINE_TEST 2113b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad# define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) 211457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#endif 21157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 21167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Defines a test that uses a test fixture. 21177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 21187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The first parameter is the name of the test fixture class, which 21197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// also doubles as the test case name. The second parameter is the 21207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// name of the test within the test case. 21217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 21227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A test fixture class must be declared earlier. The user should put 21237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// his test code between braces after using this macro. Example: 21247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 21257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// class FooTest : public testing::Test { 21267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// protected: 21277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual void SetUp() { b_.AddElement(3); } 21287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 21297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Foo a_; 21307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Foo b_; 21317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// }; 21327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 21337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST_F(FooTest, InitializesCorrectly) { 21347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_TRUE(a_.StatusIsOK()); 21357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 21367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 21377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST_F(FooTest, ReturnsElementCountCorrectly) { 21387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_EQ(0, a_.size()); 21397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_EQ(1, b_.size()); 21407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 21417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 21427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define TEST_F(test_fixture, test_name)\ 2143e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer GTEST_TEST_(test_fixture, test_name, test_fixture, \ 21447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ::testing::internal::GetTypeId<test_fixture>()) 21457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 21467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Use this macro in main() to run all tests. It returns 0 if all 21477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// tests are successful, or 1 otherwise. 21487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 21497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// RUN_ALL_TESTS() should be invoked after the command line has been 21507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// parsed by InitGoogleTest(). 21517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 21527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define RUN_ALL_TESTS()\ 21537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman (::testing::UnitTest::GetInstance()->Run()) 21547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 21557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace testing 21567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 21577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_INCLUDE_GTEST_GTEST_H_ 2158