gtest.h revision 57240ff6e2252f8986f6e47e4010bc52fbae25d1
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 577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <gtest/internal/gtest-internal.h> 587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <gtest/internal/gtest-string.h> 597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <gtest/gtest-death-test.h> 607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <gtest/gtest-message.h> 617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <gtest/gtest-param-test.h> 627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <gtest/gtest_prod.h> 637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <gtest/gtest-test-part.h> 647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <gtest/gtest-typed-test.h> 657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Depending on the platform, different string classes are available. 6757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// On Linux, in addition to ::std::string, Google also makes use of 6857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// class ::string, which has the same interface as ::std::string, but 6957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// has a different implementation. 7057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 7157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that 7257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// ::string is available AND is a distinct type to ::std::string, or 7357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// define it to 0 to indicate otherwise. 747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// If the user's ::std::string and ::string are the same class due to 7657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0. 777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 7857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined 7957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// heuristically. 807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace testing { 827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 83e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// Declares the flags. 847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 85e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag temporary enables the disabled tests. 86e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(also_run_disabled_tests); 87e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 88e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag brings the debugger on an assertion failure. 89e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(break_on_failure); 90e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 91e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag controls whether Google Test catches all test-thrown exceptions 92e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// and logs them as failures. 93e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(catch_exceptions); 94e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 95e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag enables using colors in terminal output. Available values are 96e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// "yes" to enable colors, "no" (disable colors), or "auto" (the default) 97e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// to let Google Test decide. 98e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_string_(color); 99e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 100e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag sets up the filter to select by name using a glob pattern 101e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// the tests to run. If the filter is not given all tests are executed. 102e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_string_(filter); 103e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 104e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag causes the Google Test to list tests. None of the tests listed 105e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// are actually run if the flag is provided. 106e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(list_tests); 107e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 108e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag controls whether Google Test emits a detailed XML report to a file 109e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// in addition to its normal textual output. 110e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_string_(output); 111e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 112e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flags control whether Google Test prints the elapsed time for each 113e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// test. 114e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(print_time); 115e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 116190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// This flag specifies the random number seed. 117190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin KramerGTEST_DECLARE_int32_(random_seed); 118190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 119e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag sets how many times the tests are repeated. The default value 120e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// is 1. If the value is -1 the tests are repeating forever. 121e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_int32_(repeat); 1227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This flag controls whether Google Test includes Google Test internal 1247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// stack frames in failure stack traces. 1257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanGTEST_DECLARE_bool_(show_internal_stack_frames); 1267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 127190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// When this flag is specified, tests' order is randomized on every iteration. 128190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin KramerGTEST_DECLARE_bool_(shuffle); 129190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 130e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This flag specifies the maximum number of stack frames to be 131e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// printed in a failure message. 132e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_int32_(stack_trace_depth); 133e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 134e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// When this flag is specified, a failed assertion will throw an 135e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// exception if exceptions are enabled, or exit the program with a 136e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// non-zero code otherwise. 137e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin KramerGTEST_DECLARE_bool_(throw_on_failure); 138e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 139e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// The upper limit for valid stack trace depths. 140e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramerconst int kMaxStackTraceDepth = 100; 141e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 1427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal { 1437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 144190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass AssertHelper; 145190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass DefaultGlobalTestPartResultReporter; 146190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass ExecDeathTest; 147190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass NoExecDeathTest; 148190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass FinalSuccessChecker; 1497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass GTestFlagSaver; 150190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestInfoImpl; 151190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestResultAccessor; 152190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestEventListenersAccessor; 153190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestEventRepeater; 154190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass WindowsDeathTest; 155190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass UnitTestImpl* GetUnitTestImpl(); 156190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramervoid ReportFailureInUnknownLocation(TestPartResult::Type result_type, 157190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const String& message); 158190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass PrettyUnitTestResultPrinter; 159190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass XmlUnitTestResultPrinter; 1607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Converts a streamable value to a String. A NULL pointer is 1627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// converted to "(null)". When the input value is a ::string, 1637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ::std::string, ::wstring, or ::std::wstring object, each NUL 1647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// character in it is replaced with "\\0". 1657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Declared in gtest-internal.h but defined here, so that it has access 1667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// to the definition of the Message class, required by the ARM 1677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// compiler. 1687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T> 1697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanString StreamableToString(const T& streamable) { 1707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (Message() << streamable).GetString(); 1717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 1727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace internal 1747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A class for indicating whether an assertion was successful. When 1767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// the assertion wasn't successful, the AssertionResult object 17757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// remembers a non-empty message that describes how it failed. 1787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// To create an instance of this class, use one of the factory functions 1807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (AssertionSuccess() and AssertionFailure()). 1817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// This class is useful for two purposes: 18357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 1. Defining predicate functions to be used with Boolean test assertions 18457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts 18557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 2. Defining predicate-format functions to be 18657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). 18757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 18857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// For example, if you define IsEven predicate: 18957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 19057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// testing::AssertionResult IsEven(int n) { 19157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// if ((n % 2) == 0) 19257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionSuccess(); 19357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// else 19457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionFailure() << n << " is odd"; 19557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// } 19657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 19757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) 19857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// will print the message 19957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 20057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Value of: IsEven(Fib(5)) 20157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Actual: false (5 is odd) 20257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Expected: true 20357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 20457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// instead of a more opaque 20557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 20657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Value of: IsEven(Fib(5)) 20757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Actual: false 20857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Expected: true 20957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 21057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// in case IsEven is a simple Boolean predicate. 21157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 21257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// If you expect your predicate to be reused and want to support informative 21357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up 21457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// about half as often as positive ones in our tests), supply messages for 21557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// both success and failure cases: 21657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 21757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// testing::AssertionResult IsEven(int n) { 21857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// if ((n % 2) == 0) 21957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionSuccess() << n << " is even"; 22057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// else 22157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionFailure() << n << " is odd"; 22257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// } 22357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 22457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print 22557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 22657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Value of: IsEven(Fib(6)) 22757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Actual: true (8 is even) 22857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Expected: false 22957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 23057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// NB: Predicates that support negative Boolean assertions have reduced 23157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// performance in positive ones so be careful not to use them in tests 23257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// that have lots (tens of thousands) of positive Boolean assertions. 23357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 23457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// To use this class with EXPECT_PRED_FORMAT assertions such as: 2357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Verifies that Foo() returns an even number. 2377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_PRED_FORMAT1(IsEven, Foo()); 2387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 23957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// you need to define: 2407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// testing::AssertionResult IsEven(const char* expr, int n) { 24257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// if ((n % 2) == 0) 24357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionSuccess(); 24457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// else 24557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// return testing::AssertionFailure() 24657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// << "Expected: " << expr << " is even\n Actual: it's " << n; 2477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 2487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// If Foo() returns 5, you will see the following message: 2507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Expected: Foo() is even 2527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Actual: it's 5 25357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// 25457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ AssertionResult { 2557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 25657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Copy constructor. 25757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Used in EXPECT_TRUE/FALSE(assertion_result). 25857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer AssertionResult(const AssertionResult& other); 25957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Used in the EXPECT_TRUE/FALSE(bool_expression). 26057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer explicit AssertionResult(bool success) : success_(success) {} 2617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns true iff the assertion succeeded. 26357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer operator bool() const { return success_; } // NOLINT 26457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 26557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. 26657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer AssertionResult operator!() const; 26757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 26857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Returns the text streamed into this AssertionResult. Test assertions 26957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // use it when they fail (i.e., the predicate's outcome doesn't match the 27057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // assertion's expectation). When nothing has been streamed into the 27157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // object, returns an empty string. 27257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* message() const { 27357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return message_.get() != NULL && message_->c_str() != NULL ? 27457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer message_->c_str() : ""; 27557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer } 27657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // TODO(vladl@google.com): Remove this after making sure no clients use it. 27757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Deprecated; please use message() instead. 27857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* failure_message() const { return message(); } 2797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 28057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Streams a custom failure message into this object. 28157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer template <typename T> AssertionResult& operator<<(const T& value); 2827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 2837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 28457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // No implementation - we want AssertionResult to be 28557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // copy-constructible but not assignable. 28657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer void operator=(const AssertionResult& other); 28757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 28857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Stores result of the assertion predicate. 28957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer bool success_; 29057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Stores the message describing the condition in case the expectation 29157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // construct is not satisfied with the predicate's outcome. 29257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Referenced via a pointer to avoid taking too much stack frame space 29357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // with test assertions. 29457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer internal::scoped_ptr<internal::String> message_; 29557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer}; // class AssertionResult 29657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 29757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Streams a custom failure message into this object. 29857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramertemplate <typename T> 29957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerAssertionResult& AssertionResult::operator<<(const T& value) { 30057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer Message msg; 30157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer if (message_.get() != NULL) 30257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer msg << *message_; 30357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer msg << value; 30457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer message_.reset(new internal::String(msg.GetString())); 30557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return *this; 30657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer} 3077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Makes a successful assertion result. 30957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult AssertionSuccess(); 31057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 31157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Makes a failed assertion result. 31257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult AssertionFailure(); 3137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Makes a failed assertion result with the given failure message. 31557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Deprecated; use AssertionFailure() << msg. 31657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult AssertionFailure(const Message& msg); 3177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The abstract class that all tests inherit from. 3197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// In Google Test, a unit test program contains one or many TestCases, and 3217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// each TestCase contains one or many Tests. 3227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// When you define a test using the TEST macro, you don't need to 3247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// explicitly derive from Test - the TEST macro automatically does 3257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this for you. 3267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The only time you derive from Test is when defining a test fixture 3287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// to be used a TEST_F. For example: 3297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// class FooTest : public testing::Test { 3317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// protected: 3327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual void SetUp() { ... } 3337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual void TearDown() { ... } 3347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ... 3357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// }; 3367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST_F(FooTest, Bar) { ... } 3387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST_F(FooTest, Baz) { ... } 3397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Test is not copyable. 34157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ Test { 3427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 3437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend class internal::TestInfoImpl; 3447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Defines types for pointers to functions that set up and tear down 3467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // a test case. 3477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; 3487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; 3497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // The d'tor is virtual as we intend to inherit from Test. 3517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Test(); 3527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Sets up the stuff shared by all tests in this test case. 3547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 3557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Google Test will call Foo::SetUpTestCase() before running the first 3567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // test in test case Foo. Hence a sub-class can define its own 3577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // SetUpTestCase() method to shadow the one defined in the super 3587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // class. 3597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static void SetUpTestCase() {} 3607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Tears down the stuff shared by all tests in this test case. 3627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 3637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Google Test will call Foo::TearDownTestCase() after running the last 3647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // test in test case Foo. Hence a sub-class can define its own 3657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // TearDownTestCase() method to shadow the one defined in the super 3667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // class. 3677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static void TearDownTestCase() {} 3687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns true iff the current test has a fatal failure. 3707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static bool HasFatalFailure(); 3717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 372190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the current test has a non-fatal failure. 373190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static bool HasNonfatalFailure(); 374190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 375190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the current test has a (either fatal or 376190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // non-fatal) failure. 377190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } 378190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 3797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Logs a property for the current test. Only the last value for a given 3807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // key is remembered. 3817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // These are public static so they can be called from utility functions 3827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // that are not members of the test fixture. 3837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // The arguments are const char* instead strings, as Google Test is used 3847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // on platforms where string doesn't compile. 3857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 3867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Note that a driving consideration for these RecordProperty methods 3877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // was to produce xml output suited to the Greenspan charting utility, 3887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // which at present will only chart values that fit in a 32-bit int. It 3897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // is the user's responsibility to restrict their values to 32-bit ints 3907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // if they intend them to be used with Greenspan. 3917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static void RecordProperty(const char* key, const char* value); 3927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static void RecordProperty(const char* key, int value); 3937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman protected: 3957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Creates a Test object. 3967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Test(); 3977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 3987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Sets up the test fixture. 3997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void SetUp(); 4007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Tears down the test fixture. 4027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void TearDown(); 4037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 4057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns true iff the current test has the same fixture class as 4067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // the first test in the current test case. 4077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static bool HasSameFixtureClass(); 4087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Runs the test after the test fixture has been set up. 4107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // A sub-class must implement this to define the test logic. 4127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. 4147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Instead, use the TEST or TEST_F macro. 4157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void TestBody() = 0; 4167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Sets up, executes, and tears down the test. 4187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void Run(); 4197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Uses a GTestFlagSaver to save and restore all Google Test flags. 4217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const internal::GTestFlagSaver* const gtest_flag_saver_; 4227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Often a user mis-spells SetUp() as Setup() and spends a long time 4247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // wondering why it is never called by Google Test. The declaration of 4257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // the following method is solely for catching such an error at 4267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // compile time: 4277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // - The return type is deliberately chosen to be not void, so it 4297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // will be a conflict if a user declares void Setup() in his test 4307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // fixture. 4317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // - This method is private, so it will be another compiler error 4337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // if a user calls it from his test fixture. 4347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // DO NOT OVERRIDE THIS FUNCTION. 4367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 4377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // If you see an error about overriding the following function or 4387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // about it being private, you have mis-spelled SetUp() as Setup(). 4397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman struct Setup_should_be_spelled_SetUp {}; 4407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } 4417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We disallow copying Tests. 4437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); 4447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 4457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 446190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramertypedef internal::TimeInMillis TimeInMillis; 447190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 448190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A copyable object representing a user specified test property which can be 449190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// output as a key/value string pair. 450190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 451190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// Don't inherit from TestProperty as its destructor is not virtual. 452190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestProperty { 453190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 454190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // C'tor. TestProperty does NOT have a default constructor. 455190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Always use this constructor (with parameters) to create a 456190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // TestProperty object. 45757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer TestProperty(const char* a_key, const char* a_value) : 45857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer key_(a_key), value_(a_value) { 459190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 460190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 461190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the user supplied key. 462190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* key() const { 463190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer return key_.c_str(); 464190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 465190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 466190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the user supplied value. 467190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* value() const { 468190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer return value_.c_str(); 469190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 470190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 471190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Sets a new value, overriding the one supplied in the constructor. 472190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void SetValue(const char* new_value) { 473190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer value_ = new_value; 474190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 475190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 476190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 477190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The key supplied by the user. 478190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::String key_; 479190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The value supplied by the user. 480190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::String value_; 481190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; 482190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 483190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// The result of a single Test. This includes a list of 484190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// TestPartResults, a list of TestProperties, a count of how many 485190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// death tests there are in the Test, and how much time it took to run 486190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// the Test. 487190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 488190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// TestResult is not copyable. 48957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ TestResult { 490190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 491190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Creates an empty TestResult. 492190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestResult(); 493190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 494190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // D'tor. Do not inherit from TestResult. 495190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer ~TestResult(); 496190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 497190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of all test parts. This is the sum of the number 498190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // of successful test parts and the number of failed test parts. 499190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int total_part_count() const; 500190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 501190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the number of the test properties. 502190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int test_property_count() const; 503190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 504190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test passed (i.e. no test part failed). 505190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Passed() const { return !Failed(); } 506190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 507190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test failed. 508190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Failed() const; 509190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 510190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test fatally failed. 511190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool HasFatalFailure() const; 512190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 513190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test has a non-fatal failure. 514190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool HasNonfatalFailure() const; 515190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 516190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the elapsed time, in milliseconds. 517190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TimeInMillis elapsed_time() const { return elapsed_time_; } 518190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 519190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the i-th test part result among all the results. i can range 520190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // from 0 to test_property_count() - 1. If i is not in that range, aborts 521190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // the program. 522190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const TestPartResult& GetTestPartResult(int i) const; 523190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 524190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the i-th test property. i can range from 0 to 525190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // test_property_count() - 1. If i is not in that range, aborts the 526190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // program. 527190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const TestProperty& GetTestProperty(int i) const; 528190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 529190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 530190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class TestInfo; 531190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class UnitTest; 532190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::DefaultGlobalTestPartResultReporter; 533190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::ExecDeathTest; 534190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::TestInfoImpl; 535190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::TestResultAccessor; 536190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::UnitTestImpl; 537190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::WindowsDeathTest; 538190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 539190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the vector of TestPartResults. 54057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const std::vector<TestPartResult>& test_part_results() const { 54157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return test_part_results_; 542190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 543190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 544190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the vector of TestProperties. 54557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const std::vector<TestProperty>& test_properties() const { 54657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return test_properties_; 547190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 548190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 549190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Sets the elapsed time. 550190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } 551190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 552190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a test property to the list. The property is validated and may add 553190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // a non-fatal failure if invalid (e.g., if it conflicts with reserved 554190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // key names). If a property is already recorded for the same key, the 555190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // value will be updated, rather than storing multiple values for the same 556190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // key. 557190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void RecordProperty(const TestProperty& test_property); 558190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 559190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a failure if the key is a reserved attribute of Google Test 560190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // testcase tags. Returns true if the property is valid. 561190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // TODO(russr): Validate attribute names are legal and human readable. 562190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static bool ValidateTestProperty(const TestProperty& test_property); 563190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 564190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a test part result to the list. 565190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void AddTestPartResult(const TestPartResult& test_part_result); 566190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 567190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the death test count. 568190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int death_test_count() const { return death_test_count_; } 569190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 570190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Increments the death test count, returning the new count. 571190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int increment_death_test_count() { return ++death_test_count_; } 572190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 573190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Clears the test part results. 574190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void ClearTestPartResults(); 575190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 576190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Clears the object. 577190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void Clear(); 578190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 579190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Protects mutable state of the property vector and of owned 580190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // properties, whose values may be updated. 581190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::Mutex test_properites_mutex_; 582190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 583190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The vector of TestPartResults 58457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer std::vector<TestPartResult> test_part_results_; 585190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The vector of TestProperties 58657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer std::vector<TestProperty> test_properties_; 587190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Running count of death tests. 588190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int death_test_count_; 589190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The elapsed time, in milliseconds. 590190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TimeInMillis elapsed_time_; 591190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 592190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // We disallow copying TestResult. 593190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); 594190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; // class TestResult 5957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 5967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A TestInfo object stores the following information about a test: 5977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 5987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Test case name 5997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Test name 6007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Whether the test should be run 6017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A function pointer that creates the test object when invoked 6027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Test result 6037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 6047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The constructor of TestInfo registers itself with the UnitTest 6057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// singleton such that the RUN_ALL_TESTS() macro knows which tests to 6067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// run. 60757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ TestInfo { 6087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 6097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Destructs a TestInfo object. This function is not virtual, so 6107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // don't inherit from TestInfo. 6117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ~TestInfo(); 6127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the test case name. 6147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* test_case_name() const; 6157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the test name. 6177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* name() const; 6187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the test case comment. 6207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* test_case_comment() const; 6217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the test comment. 6237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* comment() const; 6247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 625190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true if this test should run, that is if the test is not disabled 626190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // (or it is disabled but the also_run_disabled_tests flag has been specified) 627190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // and its full name matches the user-specified filter. 6287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 6297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Google Test allows the user to filter the tests by their full names. 6307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // The full name of a test Bar in test case Foo is defined as 6317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // "Foo.Bar". Only the tests that match the filter will run. 6327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 6337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // A filter is a colon-separated list of glob (not regex) patterns, 6347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // optionally followed by a '-' and a colon-separated list of 6357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // negative patterns (tests to exclude). A test is run if it 6367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // matches one of the positive patterns and does not match any of 6377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // the negative patterns. 6387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 6397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // For example, *A*:Foo.* is a filter that matches any string that 6407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // contains the character 'A' or starts with "Foo.". 6417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool should_run() const; 6427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the result of the test. 644190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const TestResult* result() const; 645190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 6467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 647e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#if GTEST_HAS_DEATH_TEST 6487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend class internal::DefaultDeathTestFactory; 6497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_DEATH_TEST 6507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend class Test; 6517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend class TestCase; 652190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::TestInfoImpl; 653190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::UnitTestImpl; 6547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend TestInfo* internal::MakeAndRegisterTestInfo( 6557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* test_case_name, const char* name, 6567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* test_case_comment, const char* comment, 6577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::TypeId fixture_class_id, 6587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Test::SetUpTestCaseFunc set_up_tc, 6597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Test::TearDownTestCaseFunc tear_down_tc, 6607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::TestFactoryBase* factory); 6617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 662190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true if this test matches the user-specified filter. 663190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool matches_filter() const; 664190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 6657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Increments the number of death tests encountered in this test so 6667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // far. 6677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman int increment_death_test_count(); 6687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Accessors for the implementation object. 6707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::TestInfoImpl* impl() { return impl_; } 6717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const internal::TestInfoImpl* impl() const { return impl_; } 6727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Constructs a TestInfo object. The newly constructed instance assumes 6747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // ownership of the factory object. 6757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman TestInfo(const char* test_case_name, const char* name, 6767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* test_case_comment, const char* comment, 6777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::TypeId fixture_class_id, 6787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::TestFactoryBase* factory); 6797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // An opaque implementation object. 6817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::TestInfoImpl* impl_; 6827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 6837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); 6847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 6857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 686190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A test case, which consists of a vector of TestInfos. 687190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// 688190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// TestCase is not copyable. 68957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ TestCase { 690190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 691190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Creates a TestCase with the given name. 692190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 693190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // TestCase does NOT have a default constructor. Always use this 694190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // constructor to create a TestCase object. 695190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 696190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Arguments: 697190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 698190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // name: name of the test case 699190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // set_up_tc: pointer to the function that sets up the test case 700190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // tear_down_tc: pointer to the function that tears down the test case 701190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestCase(const char* name, const char* comment, 702190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer Test::SetUpTestCaseFunc set_up_tc, 703190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer Test::TearDownTestCaseFunc tear_down_tc); 704190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 705190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Destructor of TestCase. 706190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual ~TestCase(); 707190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 708190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the name of the TestCase. 709190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* name() const { return name_.c_str(); } 710190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 711190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the test case comment. 712190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* comment() const { return comment_.c_str(); } 713190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 714190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true if any test in this test case should run. 715190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool should_run() const { return should_run_; } 716190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 717190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of successful tests in this test case. 718190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int successful_test_count() const; 719190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 720190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of failed tests in this test case. 721190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int failed_test_count() const; 722190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 723190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of disabled tests in this test case. 724190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int disabled_test_count() const; 725190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 726190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Get the number of tests in this test case that should run. 727190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int test_to_run_count() const; 728190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 729190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of all tests in this test case. 730190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int total_test_count() const; 731190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 732190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test case passed. 733190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Passed() const { return !Failed(); } 734190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 735190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the test case failed. 736190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Failed() const { return failed_test_count() > 0; } 737190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 738190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the elapsed time, in milliseconds. 739190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TimeInMillis elapsed_time() const { return elapsed_time_; } 740190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 741190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the i-th test among all the tests. i can range from 0 to 742190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // total_test_count() - 1. If i is not in that range, returns NULL. 743190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const TestInfo* GetTestInfo(int i) const; 744190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 745190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 746190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class Test; 747190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::UnitTestImpl; 748190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 749190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the (mutable) vector of TestInfos in this TestCase. 75057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer std::vector<TestInfo*>& test_info_list() { return test_info_list_; } 751190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 752190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the (immutable) vector of TestInfos in this TestCase. 75357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const std::vector<TestInfo*>& test_info_list() const { 75457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return test_info_list_; 755190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 756190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 757190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the i-th test among all the tests. i can range from 0 to 758190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // total_test_count() - 1. If i is not in that range, returns NULL. 759190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestInfo* GetMutableTestInfo(int i); 760190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 761190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Sets the should_run member. 762190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void set_should_run(bool should) { should_run_ = should; } 763190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 764190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a TestInfo to this test case. Will delete the TestInfo upon 765190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // destruction of the TestCase object. 766190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void AddTestInfo(TestInfo * test_info); 767190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 768190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Clears the results of all tests in this test case. 769190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void ClearResult(); 770190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 771190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Clears the results of all tests in the given test case. 772190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static void ClearTestCaseResult(TestCase* test_case) { 773190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer test_case->ClearResult(); 774190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 775190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 776190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Runs every test in this TestCase. 777190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void Run(); 778190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 779190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff test passed. 780190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static bool TestPassed(const TestInfo * test_info); 781190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 782190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff test failed. 783190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static bool TestFailed(const TestInfo * test_info); 784190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 785190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff test is disabled. 786190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static bool TestDisabled(const TestInfo * test_info); 787190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 788190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true if the given test should run. 789190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer static bool ShouldRunTest(const TestInfo *test_info); 790190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 791190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Shuffles the tests in this test case. 792190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void ShuffleTests(internal::Random* random); 793190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 794190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Restores the test order to before the first shuffle. 795190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void UnshuffleTests(); 796190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 797190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Name of the test case. 798190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::String name_; 799190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Comment on the test case. 800190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::String comment_; 801190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The vector of TestInfos in their original order. It owns the 802190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // elements in the vector. 80357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer std::vector<TestInfo*> test_info_list_; 804190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Provides a level of indirection for the test list to allow easy 805190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // shuffling and restoring the test order. The i-th element in this 806190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // vector is the index of the i-th test in the shuffled test list. 80757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer std::vector<int> test_indices_; 808190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Pointer to the function that sets up the test case. 809190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer Test::SetUpTestCaseFunc set_up_tc_; 810190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Pointer to the function that tears down the test case. 811190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer Test::TearDownTestCaseFunc tear_down_tc_; 812190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // True iff any test in this test case should run. 813190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool should_run_; 814190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Elapsed time, in milliseconds. 815190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TimeInMillis elapsed_time_; 816190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 817190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // We disallow copying TestCases. 818190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); 819190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; 820190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 8217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// An Environment object is capable of setting up and tearing down an 8227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// environment. The user should subclass this to define his own 8237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// environment(s). 8247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 8257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// An Environment object does the set-up and tear-down in virtual 8267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// methods SetUp() and TearDown() instead of the constructor and the 8277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// destructor, as: 8287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 8297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 1. You cannot safely throw from a destructor. This is a problem 8307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// as in some cases Google Test is used where exceptions are enabled, and 8317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// we may want to implement ASSERT_* using exceptions where they are 8327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// available. 8337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2. You cannot use ASSERT_* directly in a constructor or 8347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// destructor. 8357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass Environment { 8367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 8377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // The d'tor is virtual as we need to subclass Environment. 8387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~Environment() {} 8397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 8407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Override this to define how to set up the environment. 8417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void SetUp() {} 8427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 8437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Override this to define how to tear down the environment. 8447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual void TearDown() {} 8457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 8467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // If you see an error about overriding the following function or 8477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // about it being private, you have mis-spelled SetUp() as Setup(). 8487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman struct Setup_should_be_spelled_SetUp {}; 8497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } 8507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 8517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 852190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// The interface for tracing execution of tests. The methods are organized in 853190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// the order the corresponding events are fired. 854190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass TestEventListener { 855190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 856190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual ~TestEventListener() {} 857190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 858190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before any test activity starts. 859190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestProgramStart(const UnitTest& unit_test) = 0; 860190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 861190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before each iteration of tests starts. There may be more than 862190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration 863190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // index, starting from 0. 864190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestIterationStart(const UnitTest& unit_test, 865190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int iteration) = 0; 866190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 867190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before environment set-up for each iteration of tests starts. 868190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0; 869190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 870190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after environment set-up for each iteration of tests ends. 871190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; 872190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 873190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before the test case starts. 874190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestCaseStart(const TestCase& test_case) = 0; 875190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 876190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before the test starts. 877190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestStart(const TestInfo& test_info) = 0; 878190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 879190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after a failed assertion or a SUCCESS(). 880190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0; 881190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 882190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after the test ends. 883190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestEnd(const TestInfo& test_info) = 0; 884190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 885190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after the test case ends. 886190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestCaseEnd(const TestCase& test_case) = 0; 887190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 888190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired before environment tear-down for each iteration of tests starts. 889190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; 890190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 891190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after environment tear-down for each iteration of tests ends. 892190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; 893190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 894190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after each iteration of tests finishes. 895190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestIterationEnd(const UnitTest& unit_test, 896190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int iteration) = 0; 897190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 898190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Fired after all test activities have ended. 899190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; 900190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; 901190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 902190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// The convenience class for users who need to override just one or two 903190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// methods and are not concerned that a possible change to a signature of 904190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// the methods they override will not be caught during the build. For 905190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// comments about each method please see the definition of TestEventListener 906190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// above. 907190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramerclass EmptyTestEventListener : public TestEventListener { 908190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 909190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} 910190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, 911190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int /*iteration*/) {} 912190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} 913190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} 914190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} 915190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestStart(const TestInfo& /*test_info*/) {} 916190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} 917190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestEnd(const TestInfo& /*test_info*/) {} 918190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} 919190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} 920190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} 921190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, 922190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int /*iteration*/) {} 923190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} 924190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; 925190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 926190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// TestEventListeners lets users add listeners to track events in Google Test. 92757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ TestEventListeners { 928190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer public: 929190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListeners(); 930190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer ~TestEventListeners(); 931190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 932190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Appends an event listener to the end of the list. Google Test assumes 933190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // the ownership of the listener (i.e. it will delete the listener when 934190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // the test program finishes). 935190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void Append(TestEventListener* listener); 936190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 937190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Removes the given event listener from the list and returns it. It then 938190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // becomes the caller's responsibility to delete the listener. Returns 939190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // NULL if the listener is not found in the list. 940190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* Release(TestEventListener* listener); 941190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 942190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the standard listener responsible for the default console 943190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // output. Can be removed from the listeners list to shut down default 944190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // console output. Note that removing this object from the listener list 945190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // with Release transfers its ownership to the caller and makes this 946190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // function return NULL the next time. 947190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* default_result_printer() const { 948190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer return default_result_printer_; 949190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 950190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 951190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the standard listener responsible for the default XML output 952190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // controlled by the --gtest_output=xml flag. Can be removed from the 953190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // listeners list by users who want to shut down the default XML output 954190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // controlled by this flag and substitute it with custom one. Note that 955190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // removing this object from the listener list with Release transfers its 956190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // ownership to the caller and makes this function return NULL the next 957190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // time. 958190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* default_xml_generator() const { 959190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer return default_xml_generator_; 960190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer } 961190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 962190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 963190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class TestCase; 964190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::DefaultGlobalTestPartResultReporter; 965190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::NoExecDeathTest; 966190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::TestEventListenersAccessor; 967190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::TestInfoImpl; 968190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::UnitTestImpl; 969190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 970190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns repeater that broadcasts the TestEventListener events to all 971190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // subscribers. 972190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* repeater(); 973190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 974190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Sets the default_result_printer attribute to the provided listener. 975190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The listener is also added to the listener list and previous 976190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // default_result_printer is removed from it and deleted. The listener can 977190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // also be NULL in which case it will not be added to the list. Does 978190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // nothing if the previous and the current listener objects are the same. 979190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void SetDefaultResultPrinter(TestEventListener* listener); 980190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 981190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Sets the default_xml_generator attribute to the provided listener. The 982190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // listener is also added to the listener list and previous 983190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // default_xml_generator is removed from it and deleted. The listener can 984190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // also be NULL in which case it will not be added to the list. Does 985190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // nothing if the previous and the current listener objects are the same. 986190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void SetDefaultXmlGenerator(TestEventListener* listener); 987190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 988190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Controls whether events will be forwarded by the repeater to the 989190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // listeners in the list. 990190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool EventForwardingEnabled() const; 991190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void SuppressEventForwarding(); 992190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 993190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The actual list of listeners. 994190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer internal::TestEventRepeater* repeater_; 995190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Listener responsible for the standard result output. 996190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* default_result_printer_; 997190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Listener responsible for the creation of the XML output file. 998190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListener* default_xml_generator_; 999190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1000190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // We disallow copying TestEventListeners. 1001190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); 1002190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer}; 1003190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1004190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer// A UnitTest consists of a vector of TestCases. 10057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 10067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This is a singleton class. The only instance of UnitTest is 10077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// created when UnitTest::GetInstance() is first called. This 10087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// instance is never deleted. 10097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 10107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// UnitTest is not copyable. 10117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 10127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This class is thread-safe as long as the methods are called 10137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// according to their specification. 101457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ UnitTest { 10157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 10167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Gets the singleton UnitTest object. The first time this method 10177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // is called, a UnitTest object is constructed and returned. 10187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Consecutive calls will return the same object. 10197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static UnitTest* GetInstance(); 10207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 10217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Runs all tests in this UnitTest object and prints the result. 10227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns 0 if successful, or 1 otherwise. 10237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 10247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // This method can only be called from the main thread. 10257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 10267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 10277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman int Run() GTEST_MUST_USE_RESULT_; 10287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 10297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the working directory when the first TEST() or TEST_F() 10307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // was executed. The UnitTest object owns the string. 10317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* original_working_dir() const; 10327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 10337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the TestCase object for the test that's currently running, 10347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // or NULL if no test is running. 10357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const TestCase* current_test_case() const; 10367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 10377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the TestInfo object for the test that's currently running, 10387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // or NULL if no test is running. 10397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const TestInfo* current_test_info() const; 10407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1041190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the random seed used at the start of the current test run. 1042190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int random_seed() const; 1043190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1044e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#if GTEST_HAS_PARAM_TEST 10457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Returns the ParameterizedTestCaseRegistry object used to keep track of 10467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // value-parameterized tests and instantiate and register them. 1047190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 1048190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 10497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::ParameterizedTestCaseRegistry& parameterized_test_registry(); 10507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_PARAM_TEST 10517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1052190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of successful test cases. 1053190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int successful_test_case_count() const; 1054190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1055190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of failed test cases. 1056190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int failed_test_case_count() const; 1057190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1058190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of all test cases. 1059190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int total_test_case_count() const; 1060190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1061190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of all test cases that contain at least one test 1062190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // that should run. 1063190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int test_case_to_run_count() const; 1064190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1065190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of successful tests. 1066190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int successful_test_count() const; 1067190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1068190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of failed tests. 1069190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int failed_test_count() const; 1070190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1071190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of disabled tests. 1072190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int disabled_test_count() const; 1073190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1074190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of all tests. 1075190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int total_test_count() const; 1076190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1077190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the number of tests that should run. 1078190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int test_to_run_count() const; 1079190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1080190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the elapsed time, in milliseconds. 1081190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TimeInMillis elapsed_time() const; 1082190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1083190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the unit test passed (i.e. all test cases passed). 1084190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Passed() const; 1085190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1086190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns true iff the unit test failed (i.e. some test case failed 1087190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // or something outside of all tests failed). 1088190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer bool Failed() const; 1089190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1090190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the i-th test case among all the test cases. i can range from 0 to 1091190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // total_test_case_count() - 1. If i is not in that range, returns NULL. 1092190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const TestCase* GetTestCase(int i) const; 1093190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1094190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Returns the list of event listeners that can be used to track events 1095190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // inside Google Test. 1096190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestEventListeners& listeners(); 1097190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1098190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 1099190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Registers and returns a global test environment. When a test 1100190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // program is run, all global test environments will be set-up in 1101190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // the order they were registered. After all tests in the program 1102190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // have finished, all global test environments will be torn-down in 1103190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // the *reverse* order they were registered. 1104190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 1105190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // The UnitTest object takes ownership of the given environment. 1106190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // 1107190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // This method can only be called from the main thread. 1108190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer Environment* AddEnvironment(Environment* env); 1109190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1110190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a TestPartResult to the current TestResult object. All 1111190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) 1112190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // eventually call this to report their results. The user code 1113190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // should use the assertion macros instead of calling this directly. 1114190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void AddTestPartResult(TestPartResult::Type result_type, 1115190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* file_name, 1116190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int line_number, 1117190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const internal::String& message, 1118190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const internal::String& os_stack_trace); 1119190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1120190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Adds a TestProperty to the current TestResult object. If the result already 1121190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // contains a property with the same key, the value will be updated. 1122190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer void RecordPropertyForCurrentTest(const char* key, const char* value); 1123190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1124190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // Gets the i-th test case among all the test cases. i can range from 0 to 1125190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // total_test_case_count() - 1. If i is not in that range, returns NULL. 1126190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestCase* GetMutableTestCase(int i); 1127190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 11287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Accessors for the implementation object. 11297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::UnitTestImpl* impl() { return impl_; } 11307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const internal::UnitTestImpl* impl() const { return impl_; } 1131190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1132190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // These classes and funcions are friends as they need to access private 1133190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // members of UnitTest. 1134190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class Test; 1135190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend class internal::AssertHelper; 11367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman friend class internal::ScopedTrace; 1137190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend Environment* AddGlobalTestEnvironment(Environment* env); 1138190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend internal::UnitTestImpl* internal::GetUnitTestImpl(); 1139190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer friend void internal::ReportFailureInUnknownLocation( 1140190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestPartResult::Type result_type, 1141190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const internal::String& message); 11427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Creates an empty UnitTest. 11447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman UnitTest(); 11457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // D'tor 11477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman virtual ~UnitTest(); 11487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Pushes a trace defined by SCOPED_TRACE() on to the per-thread 11507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Google Test trace stack. 11517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void PushGTestTrace(const internal::TraceInfo& trace); 11527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Pops a trace from the per-thread Google Test trace stack. 11547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void PopGTestTrace(); 11557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Protects mutable state in *impl_. This is mutable as some const 11577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // methods need to lock it too. 11587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman mutable internal::Mutex mutex_; 11597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Opaque implementation object. This field is never changed once 11617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // the object is constructed. We don't mark it as const here, as 11627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // doing so will cause a warning in the constructor of UnitTest. 11637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Mutable state in *impl_ is protected by mutex_. 11647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman internal::UnitTestImpl* impl_; 11657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We disallow copying UnitTest. 11677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); 11687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 11697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A convenient wrapper for adding an environment for the test 11717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// program. 11727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 11737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// You should call this before RUN_ALL_TESTS() is called, probably in 11747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// main(). If you use gtest_main, you need to call this before main() 11757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// starts for it to take effect. For example, you can define a global 11767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// variable like this: 11777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 11787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// testing::Environment* const foo_env = 11797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// testing::AddGlobalTestEnvironment(new FooEnvironment); 11807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 11817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// However, we strongly recommend you to write your own main() and 11827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// call AddGlobalTestEnvironment() there, as relying on initialization 11837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// of global variables makes the code harder to read and may cause 11847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// problems when you register multiple environments from different 11857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// translation units and the environments have dependencies among them 11867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (remember that the compiler doesn't guarantee the order in which 11877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// global variables from different translation units are initialized). 11887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmaninline Environment* AddGlobalTestEnvironment(Environment* env) { 11897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return UnitTest::GetInstance()->AddEnvironment(env); 11907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 11917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 11927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Initializes Google Test. This must be called before calling 11937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// RUN_ALL_TESTS(). In particular, it parses a command line for the 11947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// flags that Google Test recognizes. Whenever a Google Test flag is 11957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// seen, it is removed from argv, and *argc is decremented. 11967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 11977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// No value is returned. Instead, the Google Test flag variables are 11987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// updated. 11997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 12007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Calling the function for the second time has no user-visible effect. 120157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ void InitGoogleTest(int* argc, char** argv); 12027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This overloaded version can be used in Windows programs compiled in 12047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// UNICODE mode. 120557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); 12067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal { 12087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// These overloaded versions handle ::std::string and ::std::wstring. 121057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ inline String FormatForFailureMessage(const ::std::string& str) { 12117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (Message() << '"' << str << '"').GetString(); 12127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 12137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#if GTEST_HAS_STD_WSTRING 121557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ inline String FormatForFailureMessage(const ::std::wstring& wstr) { 12167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (Message() << "L\"" << wstr << '"').GetString(); 12177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 12187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_STD_WSTRING 12197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// These overloaded versions handle ::string and ::wstring. 12217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#if GTEST_HAS_GLOBAL_STRING 122257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ inline String FormatForFailureMessage(const ::string& str) { 12237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (Message() << '"' << str << '"').GetString(); 12247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 12257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_GLOBAL_STRING 12267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#if GTEST_HAS_GLOBAL_WSTRING 122857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ inline String FormatForFailureMessage(const ::wstring& wstr) { 12297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return (Message() << "L\"" << wstr << '"').GetString(); 12307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 12317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_GLOBAL_WSTRING 12327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) 12347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// operand to be used in a failure message. The type (but not value) 12357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// of the other operand may affect the format. This allows us to 12367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// print a char* as a raw pointer when it is compared against another 12377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// char*, and print it as a C string when it is compared against an 12387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// std::string object, for example. 12397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 12407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The default implementation ignores the type of the other operand. 12417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Some specialized versions are used to handle formatting wide or 12427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// narrow C strings. 12437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 12447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 12457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2> 12467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanString FormatForComparisonFailureMessage(const T1& value, 12477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& /* other_operand */) { 12487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return FormatForFailureMessage(value); 12497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 12507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper function for {ASSERT|EXPECT}_EQ. 12527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2> 12537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult CmpHelperEQ(const char* expected_expression, 12547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* actual_expression, 12557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& expected, 12567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& actual) { 1257e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#ifdef _MSC_VER 1258e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#pragma warning(push) // Saves the current warning state. 1259e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#pragma warning(disable:4389) // Temporarily disables warning on 1260e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer // signed/unsigned mismatch. 1261e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#endif 1262e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 12637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (expected == actual) { 12647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return AssertionSuccess(); 12657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 12667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1267e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#ifdef _MSC_VER 1268e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#pragma warning(pop) // Restores the warning state. 1269e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#endif 1270e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 12717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return EqFailure(expected_expression, 12727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual_expression, 12737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman FormatForComparisonFailureMessage(expected, actual), 12747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman FormatForComparisonFailureMessage(actual, expected), 12757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman false); 12767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 12777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// With this overloaded version, we allow anonymous enums to be used 12797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums 12807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// can be implicitly cast to BiggestInt. 128157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression, 128257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual_expression, 128357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer BiggestInt expected, 128457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer BiggestInt actual); 12857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 12867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper class for {ASSERT|EXPECT}_EQ. The template argument 12877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// lhs_is_null_literal is true iff the first argument to ASSERT_EQ() 12887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// is a null pointer literal. The following default implementation is 12897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// for lhs_is_null_literal being false. 12907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <bool lhs_is_null_literal> 12917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass EqHelper { 12927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 12937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // This templatized version is for the general case. 12947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2> 12957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static AssertionResult Compare(const char* expected_expression, 12967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* actual_expression, 12977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& expected, 12987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& actual) { 12997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return CmpHelperEQ(expected_expression, actual_expression, expected, 13007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual); 13017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 13027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // With this overloaded version, we allow anonymous enums to be used 13047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous 13057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // enums can be implicitly cast to BiggestInt. 13067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // 13077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Even though its body looks the same as the above version, we 13087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // cannot merge the two, as it will make anonymous enums unhappy. 13097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static AssertionResult Compare(const char* expected_expression, 13107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* actual_expression, 13117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman BiggestInt expected, 13127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman BiggestInt actual) { 13137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return CmpHelperEQ(expected_expression, actual_expression, expected, 13147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual); 13157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 13167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 13177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This specialization is used when the first argument to ASSERT_EQ() 13197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// is a null pointer literal. 13207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <> 13217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass EqHelper<true> { 13227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 13237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We define two overloaded versions of Compare(). The first 13247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // version will be picked when the second argument to ASSERT_EQ() is 13257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or 13267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // EXPECT_EQ(false, a_bool). 13277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2> 13287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static AssertionResult Compare(const char* expected_expression, 13297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* actual_expression, 13307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& expected, 13317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T2& actual) { 13327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return CmpHelperEQ(expected_expression, actual_expression, expected, 13337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual); 13347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 13357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // This version will be picked when the second argument to 13377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // ASSERT_EQ() is a pointer, e.g. ASSERT_EQ(NULL, a_pointer). 13387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <typename T1, typename T2> 13397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static AssertionResult Compare(const char* expected_expression, 13407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* actual_expression, 1341e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer const T1& /* expected */, 13427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman T2* actual) { 13437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // We already know that 'expected' is a null pointer. 13447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return CmpHelperEQ(expected_expression, actual_expression, 13457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static_cast<T2*>(NULL), actual); 13467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 13477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 13487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A macro for implementing the helper functions needed to implement 13507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste 13517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// of similar code. 13527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 13537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// For each templatized helper function, we also define an overloaded 13547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// version for BiggestInt in order to reduce code bloat and allow 13557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled 13567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// with gcc 4. 13577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 13587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 13597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ 13607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T1, typename T2>\ 13617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 13627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const T1& val1, const T2& val2) {\ 13637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (val1 op val2) {\ 13647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return AssertionSuccess();\ 13657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } else {\ 13667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Message msg;\ 13677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman msg << "Expected: (" << expr1 << ") " #op " (" << expr2\ 13687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ 13697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << " vs " << FormatForComparisonFailureMessage(val2, val1);\ 13707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return AssertionFailure(msg);\ 13717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman }\ 13727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}\ 137357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelper##op_name(\ 137457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) 13757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 13777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements the helper function for {ASSERT|EXPECT}_NE 137957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_IMPL_CMP_HELPER_(NE, !=); 13807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements the helper function for {ASSERT|EXPECT}_LE 138157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_IMPL_CMP_HELPER_(LE, <=); 13827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements the helper function for {ASSERT|EXPECT}_LT 138357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_IMPL_CMP_HELPER_(LT, < ); 13847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements the helper function for {ASSERT|EXPECT}_GE 138557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_IMPL_CMP_HELPER_(GE, >=); 13867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Implements the helper function for {ASSERT|EXPECT}_GT 138757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_IMPL_CMP_HELPER_(GT, > ); 13887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#undef GTEST_IMPL_CMP_HELPER_ 13907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper function for {ASSERT|EXPECT}_STREQ. 13927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 13937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 139457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, 139557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual_expression, 139657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* expected, 139757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual); 13987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 13997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper function for {ASSERT|EXPECT}_STRCASEEQ. 14007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 140257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, 140357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual_expression, 140457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* expected, 140557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual); 14067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper function for {ASSERT|EXPECT}_STRNE. 14087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 141057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, 141157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s2_expression, 141257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s1, 141357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s2); 14147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The helper function for {ASSERT|EXPECT}_STRCASENE. 14167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 141857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, 141957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s2_expression, 142057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s1, 142157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s2); 14227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for *_STREQ on wide strings. 14257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 142757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression, 142857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* actual_expression, 142957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const wchar_t* expected, 143057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const wchar_t* actual); 14317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for *_STRNE on wide strings. 14337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 143557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, 143657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* s2_expression, 143757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const wchar_t* s1, 143857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const wchar_t* s2); 14397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace internal 14417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// IsSubstring() and IsNotSubstring() are intended to be used as the 14437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by 14447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// themselves. They check whether needle is a substring of haystack 14457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (NULL is considered a substring of itself only), and return an 14467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// appropriate error message when they fail. 14477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The {needle,haystack}_expr arguments are the stringified 14497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// expressions that generated the two real arguments. 145057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsSubstring( 14517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 14527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle, const char* haystack); 145357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsSubstring( 14547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 14557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const wchar_t* needle, const wchar_t* haystack); 145657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsNotSubstring( 14577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 14587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle, const char* haystack); 145957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsNotSubstring( 14607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 14617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const wchar_t* needle, const wchar_t* haystack); 146257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsSubstring( 14637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 14647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ::std::string& needle, const ::std::string& haystack); 146557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsNotSubstring( 14667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 14677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ::std::string& needle, const ::std::string& haystack); 14687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#if GTEST_HAS_STD_WSTRING 147057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsSubstring( 14717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 14727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ::std::wstring& needle, const ::std::wstring& haystack); 147357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult IsNotSubstring( 14747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* needle_expr, const char* haystack_expr, 14757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ::std::wstring& needle, const ::std::wstring& haystack); 14767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_STD_WSTRING 14777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal { 14797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper template function for comparing floating-points. 14817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Template parameter: 14837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// RawType: the raw floating-point type (either float or double) 14857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 14867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 14877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename RawType> 14887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha BrukmanAssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, 14897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* actual_expression, 14907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman RawType expected, 14917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman RawType actual) { 14927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const FloatingPoint<RawType> lhs(expected), rhs(actual); 14937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (lhs.AlmostEquals(rhs)) { 14957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return AssertionSuccess(); 14967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 14977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 14987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman StrStream expected_ss; 14997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 15007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << expected; 15017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman StrStream actual_ss; 15037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 15047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << actual; 15057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return EqFailure(expected_expression, 15077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman actual_expression, 15087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman StrStreamToString(&expected_ss), 15097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman StrStreamToString(&actual_ss), 15107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman false); 15117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 15127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Helper function for implementing ASSERT_NEAR. 15147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 15157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 151657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, 151757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* expr2, 151857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer const char* abs_error_expr, 151957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer double val1, 152057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer double val2, 152157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer double abs_error); 15227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. 15247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A class that enables one to stream messages to assertion macros 152557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerclass GTEST_API_ AssertHelper { 15267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 15277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Constructor. 1528190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer AssertHelper(TestPartResult::Type type, 1529190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* file, 1530190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int line, 15317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* message); 1532190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer ~AssertHelper(); 1533190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 15347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Message assignment is a semantic trick to enable assertion 15357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // streaming; see the GTEST_MESSAGE_ macro below. 15367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman void operator=(const Message& message) const; 1537190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 15387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 1539190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // We put our data in a struct so that the size of the AssertHelper class can 1540190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // be as small as possible. This is important because gcc is incapable of 1541190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // re-using stack space even for temporary variables, so every EXPECT_EQ 1542190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer // reserves stack space for another AssertHelper. 1543190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer struct AssertHelperData { 1544190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer AssertHelperData(TestPartResult::Type t, 1545190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* srcfile, 1546190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int line_num, 1547190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* msg) 1548190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer : type(t), file(srcfile), line(line_num), message(msg) { } 1549190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1550190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer TestPartResult::Type const type; 1551190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer const char* const file; 1552190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer int const line; 1553190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer String const message; 1554190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1555190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer private: 1556190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); 1557190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer }; 1558190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer 1559190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer AssertHelperData* const data_; 15607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); 15627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 15637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace internal 15657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1566e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#if GTEST_HAS_PARAM_TEST 15677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The abstract base class that all value-parameterized tests inherit from. 15687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 15697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// This class adds support for accessing the test parameter value via 15707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// the GetParam() method. 15717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 15727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Use it with one of the parameter generator defining functions, like Range(), 15737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Values(), ValuesIn(), Bool(), and Combine(). 15747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 15757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// class FooTest : public ::testing::TestWithParam<int> { 15767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// protected: 15777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// FooTest() { 15787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Can use GetParam() here. 15797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 15807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual ~FooTest() { 15817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Can use GetParam() here. 15827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 15837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual void SetUp() { 15847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Can use GetParam() here. 15857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 15867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual void TearDown { 15877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Can use GetParam() here. 15887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 15897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// }; 15907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST_P(FooTest, DoesBar) { 15917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// // Can use GetParam() method here. 15927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Foo foo; 15937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_TRUE(foo.DoesBar(GetParam())); 15947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 15957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); 15967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 15977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T> 15987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanclass TestWithParam : public Test { 15997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman public: 16007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef T ParamType; 16017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // The current parameter value. Is also available in the test fixture's 16037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // constructor. 16047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const ParamType& GetParam() const { return *parameter_; } 16057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman private: 16077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Sets parameter value. The caller is responsible for making sure the value 16087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // remains alive and unchanged throughout the current test. 16097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static void SetParam(const ParamType* parameter) { 16107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman parameter_ = parameter; 16117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 16127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // Static value used for accessing parameter during a test lifetime. 16147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman static const ParamType* parameter_; 16157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman // TestClass must be a subclass of TestWithParam<T>. 16177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman template <class TestClass> friend class internal::ParameterizedTestFactory; 16187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman}; 16197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmantemplate <typename T> 16217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanconst T* TestWithParam<T>::parameter_ = NULL; 16227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_PARAM_TEST 16247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros for indicating success/failure in test code. 16267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ADD_FAILURE unconditionally adds a failure to the current test. 16287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// SUCCEED generates a success - it doesn't automatically make the 16297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// current test successful, as a test is only successful when it has 16307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// no failure. 16317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 16327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_* verifies that a certain condition is satisfied. If not, 16337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// it behaves like ADD_FAILURE. In particular: 16347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 16357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_TRUE verifies that a Boolean condition is true. 16367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_FALSE verifies that a Boolean condition is false. 16377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 16387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except 16397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// that they will also abort the current function on failure. People 16407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// usually want the fail-fast behavior of FAIL and ASSERT_*, but those 16417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// writing data-driven tests often find themselves using ADD_FAILURE 16427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// and EXPECT_* more. 16437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 16447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Examples: 16457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 16467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_TRUE(server.StatusIsOK()); 16477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_FALSE(server.HasPendingRequest(port)) 16487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// << "There are still pending requests " << "on port " << port; 16497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Generates a nonfatal failure with a generic message. 16517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") 16527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Generates a fatal failure with a generic message. 165457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") 165557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 165657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Define this macro to 1 to omit the definition of FAIL(), which is a 165757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// generic name and clashes with some other libraries. 165857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#if !GTEST_DONT_DEFINE_FAIL 165957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#define FAIL() GTEST_FAIL() 166057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#endif 16617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Generates a success with a generic message. 166357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") 166457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 166557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Define this macro to 1 to omit the definition of SUCCEED(), which 166657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// is a generic name and clashes with some other libraries. 166757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#if !GTEST_DONT_DEFINE_SUCCEED 166857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#define SUCCEED() GTEST_SUCCEED() 166957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#endif 16707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros for testing exceptions. 16727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 16737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_THROW(statement, expected_exception): 16747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that the statement throws the expected exception. 16757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_NO_THROW(statement): 16767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that the statement doesn't throw any exception. 16777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_ANY_THROW(statement): 16787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that the statement throws an exception. 16797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 16807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_THROW(statement, expected_exception) \ 16817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) 16827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_NO_THROW(statement) \ 16837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) 16847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_ANY_THROW(statement) \ 16857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) 16867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_THROW(statement, expected_exception) \ 16877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) 16887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_NO_THROW(statement) \ 16897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) 16907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_ANY_THROW(statement) \ 16917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) 16927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 169357240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Boolean assertions. Condition can be either a Boolean expression or an 169457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// AssertionResult. For more information on how to use AssertionResult with 169557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// these macros see comments on that class. 16967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_TRUE(condition) \ 16977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 16987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_NONFATAL_FAILURE_) 16997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_FALSE(condition) \ 17007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 17017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_NONFATAL_FAILURE_) 17027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_TRUE(condition) \ 17037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 17047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_FATAL_FAILURE_) 17057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_FALSE(condition) \ 17067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 17077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_FATAL_FAILURE_) 17087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Includes the auto-generated header that implements a family of 17107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// generic predicate assertion macros. 17117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#include <gtest/gtest_pred_impl.h> 17127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros for testing equalities and inequalities. 17147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual 17167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 17177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 17187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 17197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 17207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 17217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// When they are not, Google Test prints both the tested expressions and 17237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// their actual values. The values must be compatible built-in types, 17247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// or you will get a compiler error. By "compatible" we mean that the 17257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// values can be compared by the respective operator. 17267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Note: 17287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 1. It is possible to make a user-defined type work with 17307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// {ASSERT|EXPECT}_??(), but that requires overloading the 17317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// comparison operators and is thus discouraged by the Google C++ 17327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Usage Guide. Therefore, you are advised to use the 17337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// {ASSERT|EXPECT}_TRUE() macro to assert that two objects are 17347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// equal. 17357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on 17377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// pointers (in particular, C strings). Therefore, if you use it 17387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// with two C strings, you are testing how their locations in memory 17397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// are related, not how their content is related. To compare two C 17407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// strings by content, use {ASSERT|EXPECT}_STR*(). 17417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to 17437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you 17447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// what the actual value is when it fails, and similarly for the 17457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// other comparisons. 17467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 4. Do not depend on the order in which {ASSERT|EXPECT}_??() 17487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// evaluate their arguments, which is undefined. 17497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 5. These macros evaluate their arguments exactly once. 17517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Examples: 17537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_NE(5, Foo()); 17557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_EQ(NULL, a_pointer); 17567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_LT(i, array_size); 17577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_GT(records.size(), 0) << "There is no record left."; 17587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_EQ(expected, actual) \ 17607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal:: \ 17617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \ 17627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 17637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_NE(expected, actual) \ 17647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) 17657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_LE(val1, val2) \ 17667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 17677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_LT(val1, val2) \ 17687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 17697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_GE(val1, val2) \ 17707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 17717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_GT(val1, val2) \ 17727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 17737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_EQ(expected, actual) \ 17757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal:: \ 17767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \ 17777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 17787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_NE(val1, val2) \ 17797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 17807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_LE(val1, val2) \ 17817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 17827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_LT(val1, val2) \ 17837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 17847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_GE(val1, val2) \ 17857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 17867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_GT(val1, val2) \ 17877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 17887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 17897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// C String Comparisons. All tests treat NULL and any non-NULL string 17907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// as different. Two NULLs are equal. 17917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 17937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 17947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case 17957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case 17967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 17977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// For wide or narrow string objects, you can use the 17987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// {ASSERT|EXPECT}_??() macros. 17997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Don't depend on the order in which the arguments are evaluated, 18017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// which is undefined. 18027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// These macros evaluate their arguments exactly once. 18047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_STREQ(expected, actual) \ 18067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) 18077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_STRNE(s1, s2) \ 18087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 18097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_STRCASEEQ(expected, actual) \ 18107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) 18117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_STRCASENE(s1, s2)\ 18127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 18137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_STREQ(expected, actual) \ 18157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) 18167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_STRNE(s1, s2) \ 18177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 18187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_STRCASEEQ(expected, actual) \ 18197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) 18207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_STRCASENE(s1, s2)\ 18217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 18227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros for comparing floating-point numbers. 18247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): 18267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that two float values are almost equal. 18277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): 18287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that two double values are almost equal. 18297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): 18307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Tests that v1 and v2 are within the given distance to each other. 18317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Google Test uses ULP-based comparison to automatically pick a default 18337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// error bound that is appropriate for the operands. See the 18347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// FloatingPoint template class in gtest-internal.h if you are 18357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// interested in the implementation details. 18367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_FLOAT_EQ(expected, actual)\ 18387ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 18397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 18407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_DOUBLE_EQ(expected, actual)\ 18427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 18437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 18447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_FLOAT_EQ(expected, actual)\ 18467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 18477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 18487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_DOUBLE_EQ(expected, actual)\ 18507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 18517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman expected, actual) 18527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_NEAR(val1, val2, abs_error)\ 18547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 18557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman val1, val2, abs_error) 18567ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18577ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_NEAR(val1, val2, abs_error)\ 18587ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 18597ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman val1, val2, abs_error) 18607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// These predicate format functions work on floating-point values, and 18627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. 18637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); 18657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Asserts that val1 is less than, or almost equal to, val2. Fails 18677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// otherwise. In particular, it fails if either val1 or val2 is NaN. 186857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, 186957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer float val1, float val2); 187057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin KramerGTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, 187157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer double val1, double val2); 18727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1874e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#if GTEST_OS_WINDOWS 18757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros that test for HRESULT failure and success, these are only useful 18777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// on Windows, and rely on Windows SDK macros and APIs to compile. 18787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) 18807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 18817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// When expr unexpectedly fails or succeeds, Google Test prints the 18827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// expected result and the actual result with both a human-readable 18837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// string representation of the error, if available, as well as the 18847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// hex result code. 18857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_HRESULT_SUCCEEDED(expr) \ 18867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 18877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_HRESULT_SUCCEEDED(expr) \ 18897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 18907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_HRESULT_FAILED(expr) \ 18927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 18937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_HRESULT_FAILED(expr) \ 18957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 18967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_OS_WINDOWS 18987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 18997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Macros that execute statement and check that it doesn't generate new fatal 19007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// failures in the current thread. 19017ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); 19037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Examples: 19057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_NO_FATAL_FAILURE(Process()); 19077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; 19087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define ASSERT_NO_FATAL_FAILURE(statement) \ 19107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) 19117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define EXPECT_NO_FATAL_FAILURE(statement) \ 19127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) 19137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Causes a trace (including the source file path, the current line 19157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// number, and the given message) to be included in every test failure 19167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// message generated by code in the current scope. The effect is 19177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// undone when the control leaves the current scope. 19187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The message argument can be anything streamable to std::ostream. 19207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// In the implementation, we include the current line number as part 19227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s 19237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// to appear in the same block - as long as they are on different 19247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// lines. 19257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define SCOPED_TRACE(message) \ 19267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ 19277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman __FILE__, __LINE__, ::testing::Message() << (message)) 19287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1929e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramernamespace internal { 1930e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 1931e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// This template is declared, but intentionally undefined. 1932e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramertemplate <typename T1, typename T2> 1933e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramerstruct StaticAssertTypeEqHelper; 1934e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 1935e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramertemplate <typename T> 1936e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramerstruct StaticAssertTypeEqHelper<T, T> {}; 1937e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 1938e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer} // namespace internal 1939e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer 1940e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// Compile-time assertion for type equality. 1941e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// StaticAssertTypeEq<type1, type2>() compiles iff type1 and type2 are 1942e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// the same type. The value it returns is not interesting. 1943e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 1944e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// Instead of making StaticAssertTypeEq a class template, we make it a 1945e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// function template that invokes a helper class template. This 1946e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// prevents a user from misusing StaticAssertTypeEq<T1, T2> by 1947e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// defining objects of that type. 1948e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 1949e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// CAVEAT: 1950e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 1951e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// When used inside a method of a class template, 1952e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// StaticAssertTypeEq<T1, T2>() is effective ONLY IF the method is 1953e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// instantiated. For example, given: 1954e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 1955e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// template <typename T> class Foo { 1956e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// public: 1957e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// void Bar() { testing::StaticAssertTypeEq<int, T>(); } 1958e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// }; 1959e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 1960e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// the code: 1961e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 1962e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// void Test1() { Foo<bool> foo; } 1963e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 1964e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// will NOT generate a compiler error, as Foo<bool>::Bar() is never 1965e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// actually instantiated. Instead, you need: 1966e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 1967e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// void Test2() { Foo<bool> foo; foo.Bar(); } 1968e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// 1969e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer// to cause a compiler error. 1970e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramertemplate <typename T1, typename T2> 1971e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramerbool StaticAssertTypeEq() { 1972e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer internal::StaticAssertTypeEqHelper<T1, T2>(); 1973e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer return true; 1974e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer} 19757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Defines a test. 19777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The first parameter is the name of the test case, and the second 19797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// parameter is the name of the test within the test case. 19807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The convention is to end the test case name with "Test". For 19827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// example, a test case for the Foo class can be named FooTest. 19837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The user should put his test code between braces after using this 19857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// macro. Example: 19867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 19877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST(FooTest, InitializesCorrectly) { 19887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Foo foo; 19897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_TRUE(foo.StatusIsOK()); 19907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 19917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 19927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Note that we call GetTestTypeId() instead of GetTypeId< 19937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ::testing::Test>() here to get the type ID of testing::Test. This 19947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// is to work around a suspected linker bug when using Google Test as 19957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// a framework on Mac OS X. The bug causes GetTypeId< 19967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// ::testing::Test>() to return different values depending on whether 19977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// the call is from the Google Test framework itself or from user test 19987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// code. GetTestTypeId() is guaranteed to always return the same 19997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// value, as it always calls GetTypeId<>() from the Google Test 20007ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// framework. 200157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#define GTEST_TEST(test_case_name, test_name)\ 2002e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer GTEST_TEST_(test_case_name, test_name, \ 20037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ::testing::Test, ::testing::internal::GetTestTypeId()) 20047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 200557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Define this macro to 1 to omit the definition of TEST(), which 200657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// is a generic name and clashes with some other libraries. 200757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#if !GTEST_DONT_DEFINE_TEST 200857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) 200957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer#endif 20107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Defines a test that uses a test fixture. 20127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// The first parameter is the name of the test fixture class, which 20147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// also doubles as the test case name. The second parameter is the 20157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// name of the test within the test case. 20167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A test fixture class must be declared earlier. The user should put 20187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// his test code between braces after using this macro. Example: 20197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// class FooTest : public testing::Test { 20217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// protected: 20227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// virtual void SetUp() { b_.AddElement(3); } 20237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Foo a_; 20257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Foo b_; 20267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// }; 20277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST_F(FooTest, InitializesCorrectly) { 20297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_TRUE(a_.StatusIsOK()); 20307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 20317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20327ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// TEST_F(FooTest, ReturnsElementCountCorrectly) { 20337ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_EQ(0, a_.size()); 20347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// EXPECT_EQ(1, b_.size()); 20357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// } 20367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define TEST_F(test_fixture, test_name)\ 2038e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer GTEST_TEST_(test_fixture, test_name, test_fixture, \ 20397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ::testing::internal::GetTypeId<test_fixture>()) 20407ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20417ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Use this macro in main() to run all tests. It returns 0 if all 20427ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// tests are successful, or 1 otherwise. 20437ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 20447ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// RUN_ALL_TESTS() should be invoked after the command line has been 20457ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// parsed by InitGoogleTest(). 20467ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20477ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#define RUN_ALL_TESTS()\ 20487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman (::testing::UnitTest::GetInstance()->Run()) 20497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace testing 20517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 20527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_INCLUDE_GTEST_GTEST_H_ 2053