gtest.h revision fbaaef999ba563838ebd00874ed8a1c01fbf286d
178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org// Copyright 2005, Google Inc. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// All rights reserved. 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// 4b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// Redistribution and use in source and binary forms, with or without 5196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// modification, are permitted provided that the following conditions are 6b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// met: 793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org// 89dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// * Redistributions of source code must retain the above copyright 96313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// notice, this list of conditions and the following disclaimer. 10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// * Redistributions in binary form must reproduce the above 11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// copyright notice, this list of conditions and the following disclaimer 12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// in the documentation and/or other materials provided with the 13196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// distribution. 14196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// * Neither the name of Google Inc. nor the names of its 15d3df75b4472c9d5d4d2615aaea74d2adce4160f8machenbach@chromium.org// contributors may be used to endorse or promote products derived from 16196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// this software without specific prior written permission. 17196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// 18196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// 30d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// Author: wan@google.com (Zhanyong Wan) 31d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// 32d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// The Google C++ Testing Framework (Google Test) 33d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// 34d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// This header file defines the public API for Google Test. It should be 35e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org// included by any test program that uses Google Test. 36d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// 37d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// IMPORTANT NOTE: Due to limitation of the C++ language, we have to 3883a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// leave some internal implementation details in this header file. 3983a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// They are clearly marked by comments like this: 4083a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// 41d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 4283a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// 43d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// Such code is NOT meant to be used by a user directly, and is subject 44d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user 4583a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// program! 4683a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// 4783a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// Acknowledgment: Google Test borrowed the idea of automatic test 48d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// registration from Barthelemy Dagenais' (barthelemy@prologique.com) 4983a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// easyUnit framework. 50d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com 51d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 52d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com#define GTEST_INCLUDE_GTEST_GTEST_H_ 534f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org 544f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org// The following platform macro is used throughout Google Test: 55e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org// _WIN32_WCE Windows CE (set in project files) 564f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org 57d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com#include <limits> 584f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org#include <gtest/internal/gtest-internal.h> 59d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com#include <gtest/internal/gtest-string.h> 604f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org#include <gtest/gtest-death-test.h> 614f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org#include <gtest/gtest-message.h> 624f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org#include <gtest/gtest-param-test.h> 63d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com#include <gtest/gtest_prod.h> 64d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com#include <gtest/gtest-test-part.h> 65d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com#include <gtest/gtest-typed-test.h> 66d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com 6783a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// Depending on the platform, different string classes are available. 68e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org// On Windows, ::std::string compiles only when exceptions are 69e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org// enabled. On Linux, in addition to ::std::string, Google also makes 70d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// use of class ::string, which has the same interface as 7183a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// ::std::string, but has a different implementation. 72d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// 73d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// The user can tell us whether ::std::string is available in his 74d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// environment by defining the macro GTEST_HAS_STD_STRING to either 1 75d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// or 0 on the compiler command line. He can also define 76d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// GTEST_HAS_GLOBAL_STRING to 1 to indicate that ::string is available 77d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// AND is a distinct type to ::std::string, or define it to 0 to 78d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// indicate otherwise. 79d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// 80d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// If the user's ::std::string and ::string are the same class due to 81d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// aliasing, he should define GTEST_HAS_STD_STRING to 1 and 82b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// GTEST_HAS_GLOBAL_STRING to 0. 83b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// 84b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// If the user doesn't define GTEST_HAS_STD_STRING and/or 85b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// GTEST_HAS_GLOBAL_STRING, they are defined heuristically. 86b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 87b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgnamespace testing { 882efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org 89b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// Declares the flags. 90b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 91b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// This flag temporary enables the disabled tests. 92b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgGTEST_DECLARE_bool_(also_run_disabled_tests); 93b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 94b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// This flag brings the debugger on an assertion failure. 9556454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.orgGTEST_DECLARE_bool_(break_on_failure); 9656454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org 9704e4f1e9e1291ac270e1cb7d8384b2af2fd2d685jkummerow@chromium.org// This flag controls whether Google Test catches all test-thrown exceptions 9804e4f1e9e1291ac270e1cb7d8384b2af2fd2d685jkummerow@chromium.org// and logs them as failures. 99f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgGTEST_DECLARE_bool_(catch_exceptions); 10041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 101fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org// This flag enables using colors in terminal output. Available values are 1025c838251403b0be9a882540f1922577abba4c872ager@chromium.org// "yes" to enable colors, "no" (disable colors), or "auto" (the default) 103ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org// to let Google Test decide. 104b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgGTEST_DECLARE_string_(color); 105753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org 106753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org// This flag sets up the filter to select by name using a glob pattern 107a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org// the tests to run. If the filter is not given all tests are executed. 108a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgGTEST_DECLARE_string_(filter); 10959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 110a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org// This flag causes the Google Test to list tests. None of the tests listed 111a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org// are actually run if the flag is provided. 112a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.orgGTEST_DECLARE_bool_(list_tests); 113a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org 114486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org// This flag controls whether Google Test emits a detailed XML report to a file 115e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org// in addition to its normal textual output. 116e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.orgGTEST_DECLARE_string_(output); 117486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 11840cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org// This flags control whether Google Test prints the elapsed time for each 119e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org// test. 120d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.orgGTEST_DECLARE_bool_(print_time); 12143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 122e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org// This flag specifies the random number seed. 123e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.orgGTEST_DECLARE_int32_(random_seed); 124e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org 125e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org// This flag sets how many times the tests are repeated. The default value 12643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// is 1. If the value is -1 the tests are repeating forever. 12758a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.orgGTEST_DECLARE_int32_(repeat); 128e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org 12943c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// This flag controls whether Google Test includes Google Test internal 130e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org// stack frames in failure stack traces. 13140cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.orgGTEST_DECLARE_bool_(show_internal_stack_frames); 13240cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org 13340cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org// When this flag is specified, tests' order is randomized on every run. 134c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comGTEST_DECLARE_bool_(shuffle); 135c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 136c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com// This flag specifies the maximum number of stack frames to be 137c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com// printed in a failure message. 138c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comGTEST_DECLARE_int32_(stack_trace_depth); 13983130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.org 140285f85a5a149f36516a20200a76899651dd95fb6machenbach@chromium.org// When this flag is specified, a failed assertion will throw an 1414e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org// exception if exceptions are enabled, or exit the program with a 142ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// non-zero code otherwise. 143ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgGTEST_DECLARE_bool_(throw_on_failure); 1444f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org 145e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// The upper limit for valid stack trace depths. 146e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.orgconst int kMaxStackTraceDepth = 100; 147ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 148ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgnamespace internal { 149ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 150a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgclass AssertHelper; 1513ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgclass DefaultGlobalTestPartResultReporter; 1523ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgclass ExecDeathTest; 1533ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgclass FinalSuccessChecker; 1543ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgclass GTestFlagSaver; 1553ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgclass TestCase; 1563ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgclass TestInfoImpl; 1573ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.orgclass TestResultAccessor; 158a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgclass UnitTestAccessor; 159ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgclass WindowsDeathTest; 160a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgclass UnitTestImpl* GetUnitTestImpl(); 161a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgvoid ReportFailureInUnknownLocation(TestPartResultType result_type, 162a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org const String& message); 1632f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org 164a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org// Converts a streamable value to a String. A NULL pointer is 165a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org// converted to "(null)". When the input value is a ::string, 166a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org// ::std::string, ::wstring, or ::std::wstring object, each NUL 167a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org// character in it is replaced with "\\0". 168a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org// Declared in gtest-internal.h but defined here, so that it has access 169a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org// to the definition of the Message class, required by the ARM 170a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org// compiler. 1712f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.orgtemplate <typename T> 172a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgString StreamableToString(const T& streamable) { 173a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org return (Message() << streamable).GetString(); 174a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org} 175a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org 176a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org} // namespace internal 177763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org 178b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// A class for indicating whether an assertion was successful. When 179b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// the assertion wasn't successful, the AssertionResult object 180ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// remembers a non-empty message that described how it failed. 181b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// 182ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// This class is useful for defining predicate-format functions to be 183b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). 184ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// 1854f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org// The constructor of AssertionResult is private. To create an 186ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// instance of this class, use one of the factory functions 18746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org// (AssertionSuccess() and AssertionFailure()). 1887e6132b924829c353864933f29124419916db550machenbach@chromium.org// 189ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// For example, in order to be able to write: 19046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org// 191763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// // Verifies that Foo() returns an even number. 19246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org// EXPECT_PRED_FORMAT1(IsEven, Foo()); 19347390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org// 19446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org// you just need to define: 195f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org// 196ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// testing::AssertionResult IsEven(const char* expr, int n) { 1977e6132b924829c353864933f29124419916db550machenbach@chromium.org// if ((n % 2) == 0) return testing::AssertionSuccess(); 1987e6132b924829c353864933f29124419916db550machenbach@chromium.org// 199ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// Message msg; 200763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// msg << "Expected: " << expr << " is even\n" 20147390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org// << " Actual: it's " << n; 202ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// return testing::AssertionFailure(msg); 203ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// } 204bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org// 205bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org// If Foo() returns 5, you will see the following message: 206bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org// 207bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org// Expected: Foo() is even 208ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// Actual: it's 5 209ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgclass AssertionResult { 2104f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org public: 211ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org // Declares factory functions for making successful and failed 212486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // assertion results as friends. 213486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org friend AssertionResult AssertionSuccess(); 214ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org friend AssertionResult AssertionFailure(const Message&); 215ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 216ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org // Returns true iff the assertion succeeded. 21743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org operator bool() const { return failure_message_.c_str() == NULL; } // NOLINT 218ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 219486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Returns the assertion's failure message. 22043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org const char* failure_message() const { return failure_message_.c_str(); } 221c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 2227e6132b924829c353864933f29124419916db550machenbach@chromium.org private: 2237e6132b924829c353864933f29124419916db550machenbach@chromium.org // The default constructor. It is used when the assertion succeeded. 2247e6132b924829c353864933f29124419916db550machenbach@chromium.org AssertionResult() {} 2257e6132b924829c353864933f29124419916db550machenbach@chromium.org 2267e6132b924829c353864933f29124419916db550machenbach@chromium.org // The constructor used when the assertion failed. 2277e6132b924829c353864933f29124419916db550machenbach@chromium.org explicit AssertionResult(const internal::String& failure_message); 2287e6132b924829c353864933f29124419916db550machenbach@chromium.org 2297e6132b924829c353864933f29124419916db550machenbach@chromium.org // Stores the assertion's failure message. 2307e6132b924829c353864933f29124419916db550machenbach@chromium.org internal::String failure_message_; 231b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org}; 232b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 233ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// Makes a successful assertion result. 234b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgAssertionResult AssertionSuccess(); 235ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 2364a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// Makes a failed assertion result with the given failure message. 237ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgAssertionResult AssertionFailure(const Message& msg); 238ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 239ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// The abstract class that all tests inherit from. 240ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// 241ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// In Google Test, a unit test program contains one or many TestCases, and 242763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// each TestCase contains one or many Tests. 243ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// 244763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// When you define a test using the TEST macro, you don't need to 245b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// explicitly derive from Test - the TEST macro automatically does 246ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// this for you. 2474f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org// 2484f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org// The only time you derive from Test is when defining a test fixture 249895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org// to be used a TEST_F. For example: 250ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// 251763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// class FooTest : public testing::Test { 2524f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org// protected: 253ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// virtual void SetUp() { ... } 254ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// virtual void TearDown() { ... } 255ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// ... 256ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org// }; 2572efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org// 258486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org// TEST_F(FooTest, Bar) { ... } 2592efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org// TEST_F(FooTest, Baz) { ... } 2602efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org// 261486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org// Test is not copyable. 2622efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.orgclass Test { 263486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org public: 2642efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org friend class internal::TestInfoImpl; 265f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org 266ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org // Defines types for pointers to functions that set up and tear down 2674d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org // a test case. 268486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; 269b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; 270b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 271a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // The d'tor is virtual as we intend to inherit from Test. 272a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org virtual ~Test(); 273a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 274a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // Sets up the stuff shared by all tests in this test case. 2755d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // 2765d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // Google Test will call Foo::SetUpTestCase() before running the first 2775d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // test in test case Foo. Hence a sub-class can define its own 2785d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // SetUpTestCase() method to shadow the one defined in the super 2795d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // class. 280486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org static void SetUpTestCase() {} 2815d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org 282471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org // Tears down the stuff shared by all tests in this test case. 2835d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // 2845d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // Google Test will call Foo::TearDownTestCase() after running the last 2855d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // test in test case Foo. Hence a sub-class can define its own 2865d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // TearDownTestCase() method to shadow the one defined in the super 287ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // class. 288e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org static void TearDownTestCase() {} 289486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 290e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // Returns true iff the current test has a fatal failure. 291ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com static bool HasFatalFailure(); 2925d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org 2935d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // Returns true iff the current test has a non-fatal failure. 2945d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org static bool HasNonfatalFailure(); 295b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 2965d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // Returns true iff the current test has a (either fatal or 297471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org // non-fatal) failure. 2983ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } 2993ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org 3003ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org // Logs a property for the current test. Only the last value for a given 3013ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org // key is remembered. 3023ee7a7ed19002e4a0efbf6cdb2a201f21763a80adanno@chromium.org // These are public static so they can be called from utility functions 3035d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // that are not members of the test fixture. 3045d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // The arguments are const char* instead strings, as Google Test is used 3055d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // on platforms where string doesn't compile. 306e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // 3075d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // Note that a driving consideration for these RecordProperty methods 308e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // was to produce xml output suited to the Greenspan charting utility, 3095d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // which at present will only chart values that fit in a 32-bit int. It 310b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // is the user's responsibility to restrict their values to 32-bit ints 311b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // if they intend them to be used with Greenspan. 3125d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org static void RecordProperty(const char* key, const char* value); 3135d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org static void RecordProperty(const char* key, int value); 314b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 315b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org protected: 3162cc82ae439960d1adaf4374e093730dc23945d59ager@chromium.org // Creates a Test object. 317b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org Test(); 318b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 319b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Sets up the test fixture. 320b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org virtual void SetUp(); 3215f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org 3225d00b60c201d860c74821f553fdc34f4e057b411lrn@chromium.org // Tears down the test fixture. 3235f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org virtual void TearDown(); 3245f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org 3255f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org private: 3261456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org // Returns true iff the current test has the same fixture class as 3279cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org // the first test in the current test case. 32841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org static bool HasSameFixtureClass(); 3291456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 3301456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org // Runs the test after the test fixture has been set up. 3311456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org // 3321456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org // A sub-class must implement this to define the test logic. 3331456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org // 3341456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. 3359cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org // Instead, use the TEST or TEST_F macro. 336e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org virtual void TestBody() = 0; 33743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 3381456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org // Sets up, executes, and tears down the test. 3391456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org void Run(); 3401456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 341731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org // Uses a GTestFlagSaver to save and restore all Google Test flags. 342731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org const internal::GTestFlagSaver* const gtest_flag_saver_; 343731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org 344cddc71f18a46e6117cc765b1c53ca122e7aaa318rossberg@chromium.org // Often a user mis-spells SetUp() as Setup() and spends a long time 345cddc71f18a46e6117cc765b1c53ca122e7aaa318rossberg@chromium.org // wondering why it is never called by Google Test. The declaration of 346cddc71f18a46e6117cc765b1c53ca122e7aaa318rossberg@chromium.org // the following method is solely for catching such an error at 34783a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org // compile time: 3481456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org // 349e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // - The return type is deliberately chosen to be not void, so it 350afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org // will be a conflict if a user declares void Setup() in his test 351afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org // fixture. 352afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org // 353cddc71f18a46e6117cc765b1c53ca122e7aaa318rossberg@chromium.org // - This method is private, so it will be another compiler error 3541456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org // if a user calls it from his test fixture. 355731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org // 356731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org // DO NOT OVERRIDE THIS FUNCTION. 357731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org // 358731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org // If you see an error about overriding the following function or 359731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org // about it being private, you have mis-spelled SetUp() as Setup(). 360d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org struct Setup_should_be_spelled_SetUp {}; 361731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } 362731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org 363731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org // We disallow copying Tests. 364731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); 3651456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org}; 366731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org 367731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.orgtypedef internal::TimeInMillis TimeInMillis; 368a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 369731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.orgnamespace internal { 370a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 371d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// A copyable object representing a user specified test property which can be 372d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// output as a key/value string pair. 373d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// 374a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// Don't inherit from TestProperty as its destructor is not virtual. 375a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgclass TestProperty { 376a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org public: 377a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // C'tor. TestProperty does NOT have a default constructor. 3782cc82ae439960d1adaf4374e093730dc23945d59ager@chromium.org // Always use this constructor (with parameters) to create a 379b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // TestProperty object. 380b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org TestProperty(const char* key, const char* value) : 381b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org key_(key), value_(value) { 382b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org } 383b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 384b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Gets the user supplied key. 385763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org const char* key() const { 386b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org return key_.c_str(); 387b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org } 388afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org 389afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org // Gets the user supplied value. 390afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org const char* value() const { 391afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org return value_.c_str(); 392afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org } 393afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org 394afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org // Sets a new value, overriding the one supplied in the constructor. 395afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org void SetValue(const char* new_value) { 3961456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org value_ = new_value; 397afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org } 398afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org 399afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org private: 400763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org // The key supplied by the user. 401afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org internal::String key_; 402afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org // The value supplied by the user. 403763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org internal::String value_; 404afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org}; 405afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org 406b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// The result of a single Test. This includes a list of 407b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// TestPartResults, a list of TestProperties, a count of how many 408b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// death tests there are in the Test, and how much time it took to run 409b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// the Test. 410b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// 411e90029b96bc4097e0f14d33cc086030d7ad5007awhesse@chromium.org// TestResult is not copyable. 412b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgclass TestResult { 413b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org public: 414b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Creates an empty TestResult. 41543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org TestResult(); 416763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org 4174e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org // D'tor. Do not inherit from TestResult. 418d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com ~TestResult(); 4194f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org 420d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com // Gets the number of all test parts. This is the sum of the number 421d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com // of successful test parts and the number of failed test parts. 422b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org int total_part_count() const; 4234edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org 4244edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org // Returns the number of the test properties. 4254edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org int test_property_count() const; 4264edebd5691ee147fa134ad8aaf6cc3c939831b93machenbach@chromium.org 427b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Returns true iff the test passed (i.e. no test part failed). 428b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org bool Passed() const { return !Failed(); } 429b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 430d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com // Returns true iff the test failed. 431d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com bool Failed() const; 432e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org 433d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com // Returns true iff the test fatally failed. 434865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org bool HasFatalFailure() const; 4354e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org 436b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Returns true iff the test has a non-fatal failure. 437b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org bool HasNonfatalFailure() const; 438b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 439b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Returns the elapsed time, in milliseconds. 440486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org TimeInMillis elapsed_time() const { return elapsed_time_; } 441e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org 4424a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Returns the i-th test part result among all the results. i can range 443b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // from 0 to test_property_count() - 1. If i is not in that range, aborts 444b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // the program. 445486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org const TestPartResult& GetTestPartResult(int i) const; 446e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org 447486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Returns the i-th test property. i can range from 0 to 4484a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // test_property_count() - 1. If i is not in that range, aborts the 449b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // program. 4504a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org const TestProperty& GetTestProperty(int i) const; 451486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 452e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org private: 453486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org friend class internal::DefaultGlobalTestPartResultReporter; 454763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org friend class internal::ExecDeathTest; 455b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org friend class internal::TestInfoImpl; 456b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org friend class internal::TestResultAccessor; 457b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org friend class internal::UnitTestImpl; 458486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org friend class internal::WindowsDeathTest; 459486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org friend class testing::TestInfo; 460c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org friend class testing::UnitTest; 4616d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 4624a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Gets the vector of TestPartResults. 463b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org const internal::Vector<TestPartResult>& test_part_results() const { 4644a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org return *test_part_results_; 4654a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org } 466b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 467b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Gets the vector of TestProperties. 468b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org const internal::Vector<TestProperty>& test_properties() const { 4694a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org return *test_properties_; 4704a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org } 4714a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 4724a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Sets the elapsed time. 473b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } 4744a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 4754a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Adds a test property to the list. The property is validated and may add 4764a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // a non-fatal failure if invalid (e.g., if it conflicts with reserved 4774a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // key names). If a property is already recorded for the same key, the 4784a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // value will be updated, rather than storing multiple values for the same 4794a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // key. 4804a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org void RecordProperty(const TestProperty& test_property); 4814a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 482c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org // Adds a failure if the key is a reserved attribute of Google Test 483a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // testcase tags. Returns true if the property is valid. 484a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // TODO(russr): Validate attribute names are legal and human readable. 485a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org static bool ValidateTestProperty(const TestProperty& test_property); 4864a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 4874a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Adds a test part result to the list. 4884a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org void AddTestPartResult(const TestPartResult& test_part_result); 489a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4904a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Returns the death test count. 491a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org int death_test_count() const { return death_test_count_; } 4924a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 4934a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Increments the death test count, returning the new count. 4946d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org int increment_death_test_count() { return ++death_test_count_; } 495b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 496b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Clears the test part results. 497b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org void ClearTestPartResults(); 498b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 4994a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Clears the object. 5004a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org void Clear(); 501b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 502b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Protects mutable state of the property vector and of owned 5034a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // properties, whose values may be updated. 5044a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org internal::Mutex test_properites_mutex_; 5057a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org 5067a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org // The vector of TestPartResults 5077a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org internal::scoped_ptr<internal::Vector<TestPartResult> > test_part_results_; 5087a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org // The vector of TestProperties 5097a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org internal::scoped_ptr<internal::Vector<TestProperty> > test_properties_; 5104a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Running count of death tests. 511b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org int death_test_count_; 5124a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // The elapsed time, in milliseconds. 5134a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org TimeInMillis elapsed_time_; 5147a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org 5157a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org // We disallow copying TestResult. 5167a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); 5177a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org}; // class TestResult 5187a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org 5194a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org} // namespace internal 5204a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 5214a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// A TestInfo object stores the following information about a test: 5224a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// 523c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// Test case name 524a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// Test name 525a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// Whether the test should be run 526a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// A function pointer that creates the test object when invoked 527e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org// Test result 5284a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// 529a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// The constructor of TestInfo registers itself with the UnitTest 5304a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// singleton such that the RUN_ALL_TESTS() macro knows which tests to 531a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// run. 5324a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.orgclass TestInfo { 5334a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org public: 534a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // Destructs a TestInfo object. This function is not virtual, so 5354a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // don't inherit from TestInfo. 536a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org ~TestInfo(); 5374a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 5384a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Returns the test case name. 5394a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org const char* test_case_name() const; 540a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5414a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Returns the test name. 542a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org const char* name() const; 5434a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 5444a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Returns the test case comment. 5454a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org const char* test_case_comment() const; 5464a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 5476d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org // Returns the test comment. 548b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org const char* comment() const; 549b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 550b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Returns true if this test should run, that is if the test is not disabled 551b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // (or it is disabled but the also_run_disabled_tests flag has been specified) 5524a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // and its full name matches the user-specified filter. 5534a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // 554e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // Google Test allows the user to filter the tests by their full names. 5554a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // The full name of a test Bar in test case Foo is defined as 5564a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // "Foo.Bar". Only the tests that match the filter will run. 557b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // 558b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // A filter is a colon-separated list of glob (not regex) patterns, 5594a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // optionally followed by a '-' and a colon-separated list of 5604a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // negative patterns (tests to exclude). A test is run if it 5614a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // matches one of the positive patterns and does not match any of 562e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // the negative patterns. 5634a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // 5644a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // For example, *A*:Foo.* is a filter that matches any string that 5654a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // contains the character 'A' or starts with "Foo.". 566b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org bool should_run() const; 5674a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 5684a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Returns the result of the test. 5694a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org const internal::TestResult* result() const; 570e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org 5714a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org private: 57243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org#if GTEST_HAS_DEATH_TEST 5739dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com friend class internal::DefaultDeathTestFactory; 5749dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#endif // GTEST_HAS_DEATH_TEST 5759dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com friend class internal::TestInfoImpl; 5764a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org friend class internal::UnitTestImpl; 5774a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org friend class Test; 578e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org friend class internal::TestCase; 5794a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org friend TestInfo* internal::MakeAndRegisterTestInfo( 5804a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org const char* test_case_name, const char* name, 5814a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org const char* test_case_comment, const char* comment, 582c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org internal::TypeId fixture_class_id, 5836d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org Test::SetUpTestCaseFunc set_up_tc, 5844a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org Test::TearDownTestCaseFunc tear_down_tc, 585b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org internal::TestFactoryBase* factory); 586b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 5874a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Returns true if this test matches the user-specified filter. 5884a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org bool matches_filter() const; 589e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org 5904a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Increments the number of death tests encountered in this test so 5914a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // far. 592b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org int increment_death_test_count(); 5934a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 5944a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Accessors for the implementation object. 5954a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org internal::TestInfoImpl* impl() { return impl_; } 5964a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org const internal::TestInfoImpl* impl() const { return impl_; } 59783a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org 5984a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Constructs a TestInfo object. The newly constructed instance assumes 599ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // ownership of the factory object. 60083a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org TestInfo(const char* test_case_name, const char* name, 6014a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org const char* test_case_comment, const char* comment, 602ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org internal::TypeId fixture_class_id, 6034a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org internal::TestFactoryBase* factory); 604b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 605b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // An opaque implementation object. 606b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org internal::TestInfoImpl* impl_; 6074a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 6084a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); 6094a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org}; 61083a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org 6114a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.orgnamespace internal { 612ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 61383a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// A test case, which consists of a vector of TestInfos. 6144a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// 615ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// TestCase is not copyable. 6164a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.orgclass TestCase { 6174a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org public: 6184a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Creates a TestCase with the given name. 6194a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // 6204a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // TestCase does NOT have a default constructor. Always use this 6214a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // constructor to create a TestCase object. 622e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // 623e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // Arguments: 6244a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // 6254a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // name: name of the test case 6264a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // set_up_tc: pointer to the function that sets up the test case 6274a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // tear_down_tc: pointer to the function that tears down the test case 6284a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org TestCase(const char* name, const char* comment, 6294a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org Test::SetUpTestCaseFunc set_up_tc, 6304a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org Test::TearDownTestCaseFunc tear_down_tc); 6314a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 6324a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Destructor of TestCase. 6334a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org virtual ~TestCase(); 6344a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 6354a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Gets the name of the TestCase. 6364a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org const char* name() const { return name_.c_str(); } 6374a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 6384a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Returns the test case comment. 6394a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org const char* comment() const { return comment_.c_str(); } 6404a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 6414a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Returns true if any test in this test case should run. 6424a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org bool should_run() const { return should_run_; } 6434a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 6444a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Gets the number of successful tests in this test case. 6454a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org int successful_test_count() const; 646c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org 647d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // Gets the number of failed tests in this test case. 648d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org int failed_test_count() const; 649d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 6504a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Gets the number of disabled tests in this test case. 6514a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org int disabled_test_count() const; 6524a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 6534a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org // Get the number of tests in this test case that should run. 6549dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com int test_to_run_count() const; 6559dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 6569dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com // Gets the number of all tests in this test case. 6579dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com int total_test_count() const; 6586d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 6596d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org // Returns true iff the test case passed. 66065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org bool Passed() const { return !Failed(); } 66165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 662b99c75496e05b4cd58815ada1e39e6029130d11crossberg@chromium.org // Returns true iff the test case failed. 663f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org bool Failed() const { return failed_test_count() > 0; } 6647a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org 66565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org // Returns the elapsed time, in milliseconds. 66665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org TimeInMillis elapsed_time() const { return elapsed_time_; } 66765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 668b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Returns the i-th test among all the tests. i can range from 0 to 669b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // total_test_count() - 1. If i is not in that range, returns NULL. 67065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org const TestInfo* GetTestInfo(int i) const; 67165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 67265fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org private: 67365fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org friend class testing::Test; 67465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org friend class internal::UnitTestImpl; 67565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 67665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org // Gets the (mutable) vector of TestInfos in this TestCase. 67765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org internal::Vector<TestInfo*>& test_info_list() { return *test_info_list_; } 67865fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 67965fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org // Gets the (immutable) vector of TestInfos in this TestCase. 68065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org const internal::Vector<TestInfo *> & test_info_list() const { 681b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org return *test_info_list_; 682b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org } 683b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 684b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Sets the should_run member. 685486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org void set_should_run(bool should) { should_run_ = should; } 686e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org 687486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Adds a TestInfo to this test case. Will delete the TestInfo upon 688486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // destruction of the TestCase object. 689486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org void AddTestInfo(TestInfo * test_info); 690486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 691d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org // Clears the results of all tests in this test case. 692d8a3a149cb9dac7437e264a2fe50f680418c3a45jkummerow@chromium.org void ClearResult(); 693486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 694486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Clears the results of all tests in the given test case. 695486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org static void ClearTestCaseResult(TestCase* test_case) { 696486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org test_case->ClearResult(); 697486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org } 698486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 699486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Runs every test in this TestCase. 700486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org void Run(); 701e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org 702486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Runs every test in the given TestCase. 703486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org static void RunTestCase(TestCase * test_case) { test_case->Run(); } 704486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 705486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Returns true iff test passed. 706486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org static bool TestPassed(const TestInfo * test_info); 707486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 708b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Returns true iff test failed. 709b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org static bool TestFailed(const TestInfo * test_info); 710b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 711b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Returns true iff test is disabled. 712486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org static bool TestDisabled(const TestInfo * test_info); 713e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org 714486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Returns true if the given test should run. 71543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org static bool ShouldRunTest(const TestInfo *test_info); 716b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 717b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Name of the test case. 718b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org internal::String name_; 719486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Comment on the test case. 720486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org internal::String comment_; 721486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Vector of TestInfos. 722486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org internal::Vector<TestInfo*>* test_info_list_; 723e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // Pointer to the function that sets up the test case. 724e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org Test::SetUpTestCaseFunc set_up_tc_; 725e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // Pointer to the function that tears down the test case. 726e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org Test::TearDownTestCaseFunc tear_down_tc_; 727486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // True iff any test in this test case should run. 72843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org bool should_run_; 729c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // Elapsed time, in milliseconds. 730b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org TimeInMillis elapsed_time_; 731486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 732486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // We disallow copying TestCases. 733c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); 734b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org}; 735b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 736b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org} // namespace internal 737b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 738c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// An Environment object is capable of setting up and tearing down an 739a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// environment. The user should subclass this to define his own 740a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// environment(s). 741a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// 742d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// An Environment object does the set-up and tear-down in virtual 743d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// methods SetUp() and TearDown() instead of the constructor and the 744d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// destructor, as: 745d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// 746d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// 1. You cannot safely throw from a destructor. This is a problem 74783a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// as in some cases Google Test is used where exceptions are enabled, and 74883a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// we may want to implement ASSERT_* using exceptions where they are 749c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org// available. 750d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// 2. You cannot use ASSERT_* directly in a constructor or 751d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// destructor. 752d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgclass Environment { 753d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org public: 754d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org // The d'tor is virtual as we need to subclass Environment. 755a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org virtual ~Environment() {} 756a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 757a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // Override this to define how to set up the environment. 758ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com virtual void SetUp() {} 7598e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 760e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // Override this to define how to tear down the environment. 761000f7fbc1dfa59e414332fd2898b5da4d44eedd6jkummerow@chromium.org virtual void TearDown() {} 762ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com private: 76343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org // If you see an error about overriding the following function or 764ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // about it being private, you have mis-spelled SetUp() as Setup(). 765594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org struct Setup_should_be_spelled_SetUp {}; 766ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } 767594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org}; 768ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 769ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// A UnitTest consists of a vector of TestCases. 770ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// 771ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// This is a singleton class. The only instance of UnitTest is 772ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// created when UnitTest::GetInstance() is first called. This 773ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// instance is never deleted. 774486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// 775486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// UnitTest is not copyable. 776486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// 777ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// This class is thread-safe as long as the methods are called 778ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// according to their specification. 7791805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.orgclass UnitTest { 780486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org public: 781486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Gets the singleton UnitTest object. The first time this method 782486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // is called, a UnitTest object is constructed and returned. 7837028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org // Consecutive calls will return the same object. 784ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com static UnitTest* GetInstance(); 785ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 7867028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org // Runs all tests in this UnitTest object and prints the result. 7877028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org // Returns 0 if successful, or 1 otherwise. 788486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // 789486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // This method can only be called from the main thread. 790486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // 791486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 792ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com int Run() GTEST_MUST_USE_RESULT_; 793ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 79480c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org // Returns the working directory when the first TEST() or TEST_F() 79543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org // was executed. The UnitTest object owns the string. 796b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org const char* original_working_dir() const; 7974668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 798b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Returns the TestCase object for the test that's currently running, 799486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // or NULL if no test is running. 800ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com const internal::TestCase* current_test_case() const; 801ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 802ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Returns the TestInfo object for the test that's currently running, 80380c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org // or NULL if no test is running. 80443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org const TestInfo* current_test_info() const; 80580c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 8061805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org // Returns the random seed used at the start of the current test run. 8074668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org int random_seed() const; 8084668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 809b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org#if GTEST_HAS_PARAM_TEST 810486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // Returns the ParameterizedTestCaseRegistry object used to keep track of 811ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // value-parameterized tests and instantiate and register them. 812763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org // 8134668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 814394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com internal::ParameterizedTestCaseRegistry& parameterized_test_registry(); 815e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org#endif // GTEST_HAS_PARAM_TEST 816394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 817355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org private: 8184668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org // Registers and returns a global test environment. When a test 8194668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org // program is run, all global test environments will be set-up in 8204668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org // the order they were registered. After all tests in the program 8214668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org // have finished, all global test environments will be torn-down in 8224668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org // the *reverse* order they were registered. 823ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // 82480c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org // The UnitTest object takes ownership of the given environment. 8254668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org // 826486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org // This method can only be called from the main thread. 8274668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org Environment* AddEnvironment(Environment* env); 8289bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org 8294668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org // Adds a TestPartResult to the current TestResult object. All 830b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) 831b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // eventually call this to report their results. The user code 832b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // should use the assertion macros instead of calling this directly. 833b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org void AddTestPartResult(TestPartResultType result_type, 834b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org const char* file_name, 835ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com int line_number, 836ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com const internal::String& message, 837ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com const internal::String& os_stack_trace); 838ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 839ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Adds a TestProperty to the current TestResult object. If the result already 840ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // contains a property with the same key, the value will be updated. 8417028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org void RecordPropertyForCurrentTest(const char* key, const char* value); 842ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 8437c0666e15d1f68f0fef5db9e5c409fab010ed816machenbach@chromium.org // Accessors for the implementation object. 844ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com internal::UnitTestImpl* impl() { return impl_; } 845ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com const internal::UnitTestImpl* impl() const { return impl_; } 8467028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 847ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the number of successful test cases. 848ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com int successful_test_case_count() const; 849ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 850ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the number of failed test cases. 851ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com int failed_test_case_count() const; 852ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 853ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the number of all test cases. 85443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org int total_test_case_count() const; 855ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 856ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the number of all test cases that contain at least one test 857ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // that should run. 858ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com int test_case_to_run_count() const; 859ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 860ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the number of successful tests. 861ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com int successful_test_count() const; 86243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 863ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the number of failed tests. 864ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com int failed_test_count() const; 865ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 866ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the number of disabled tests. 867ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com int disabled_test_count() const; 868ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 869ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the number of all tests. 870ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com int total_test_count() const; 871ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 872ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the number of tests that should run. 873ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com int test_to_run_count() const; 874ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 875ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the elapsed time, in milliseconds. 876ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com TimeInMillis elapsed_time() const; 877ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 878763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org // Returns true iff the unit test passed (i.e. all test cases passed). 879ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com bool Passed() const; 880ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 881ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Returns true iff the unit test failed (i.e. some test case failed 8829bf7aff6cc5ed8807b7b2abc11b6cf77b928ded1machenbach@chromium.org // or something outside of all tests failed). 883ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com bool Failed() const; 884ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 885ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Gets the i-th test case among all the test cases. i can range from 0 to 886ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // total_test_case_count() - 1. If i is not in that range, returns NULL. 887ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com const internal::TestCase* GetTestCase(int i) const; 888ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 889ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // ScopedTrace is a friend as it needs to modify the per-thread 8908e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org // trace stack, which is a private member of UnitTest. 891e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // TODO(vladl@google.com): Order all declarations according to the style 892e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org // guide after publishing of the above methods is done. 8938e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org friend class internal::ScopedTrace; 8948e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org friend Environment* AddGlobalTestEnvironment(Environment* env); 8958e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org friend internal::UnitTestImpl* internal::GetUnitTestImpl(); 8968e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org friend class internal::AssertHelper; 8978e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org friend class Test; 8988e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org friend void internal::ReportFailureInUnknownLocation( 89943c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org TestPartResultType result_type, 90043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org const internal::String& message); 9018e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org // TODO(vladl@google.com): Remove these when publishing the new accessors. 9028e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org friend class PrettyUnitTestResultPrinter; 90343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org friend class XmlUnitTestResultPrinter; 9048e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org friend class internal::UnitTestAccessor; 9058e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org friend class FinalSuccessChecker; 9068e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org FRIEND_TEST(ApiTest, UnitTestImmutableAccessorsWork); 9078e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org FRIEND_TEST(ApiTest, TestCaseImmutableAccessorsWork); 9088e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org FRIEND_TEST(ApiTest, DisabledTestCaseAccessorsWork); 9098e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 9108e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 9118e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org // Creates an empty UnitTest. 9128e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org UnitTest(); 9138e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 9148e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org // D'tor 9158e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org virtual ~UnitTest(); 916ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 917ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Pushes a trace defined by SCOPED_TRACE() on to the per-thread 918ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Google Test trace stack. 919ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com void PushGTestTrace(const internal::TraceInfo& trace); 920ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 921ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Pops a trace from the per-thread Google Test trace stack. 922ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com void PopGTestTrace(); 923ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 924ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Protects mutable state in *impl_. This is mutable as some const 925ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // methods need to lock it too. 926ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com mutable internal::Mutex mutex_; 927ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 928ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Opaque implementation object. This field is never changed once 929ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // the object is constructed. We don't mark it as const here, as 930ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // doing so will cause a warning in the constructor of UnitTest. 931ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // Mutable state in *impl_ is protected by mutex_. 932ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com internal::UnitTestImpl* impl_; 933ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 934ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com // We disallow copying UnitTest. 935ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); 936ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com}; 937ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 938ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// A convenient wrapper for adding an environment for the test 939ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// program. 940ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// 941ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// You should call this before RUN_ALL_TESTS() is called, probably in 942ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// main(). If you use gtest_main, you need to call this before main() 943ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// starts for it to take effect. For example, you can define a global 944ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// variable like this: 945ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// 946ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com// testing::Environment* const foo_env = 947b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// testing::AddGlobalTestEnvironment(new FooEnvironment); 948b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// 949763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// However, we strongly recommend you to write your own main() and 950b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// call AddGlobalTestEnvironment() there, as relying on initialization 9511805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org// of global variables makes the code harder to read and may cause 95247390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org// problems when you register multiple environments from different 953b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// translation units and the environments have dependencies among them 954b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// (remember that the compiler doesn't guarantee the order in which 955b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// global variables from different translation units are initialized). 956b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orginline Environment* AddGlobalTestEnvironment(Environment* env) { 9578e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org return UnitTest::GetInstance()->AddEnvironment(env); 9588e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org} 9598e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org 96047390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org// Initializes Google Test. This must be called before calling 9618e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org// RUN_ALL_TESTS(). In particular, it parses a command line for the 9628e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org// flags that Google Test recognizes. Whenever a Google Test flag is 9638e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org// seen, it is removed from argv, and *argc is decremented. 9648e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org// 9659dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// No value is returned. Instead, the Google Test flag variables are 9669dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// updated. 9679dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// 9689dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// Calling the function for the second time has no user-visible effect. 969d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgvoid InitGoogleTest(int* argc, char** argv); 9709dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 9714a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// This overloaded version can be used in Windows programs compiled in 972d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// UNICODE mode. 9739dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comvoid InitGoogleTest(int* argc, wchar_t** argv); 9749dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 9759dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comnamespace internal { 9769dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 9779dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// These overloaded versions handle ::std::string and ::std::wstring. 9789dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#if GTEST_HAS_STD_STRING 9799dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.cominline String FormatForFailureMessage(const ::std::string& str) { 9809dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com return (Message() << '"' << str << '"').GetString(); 98144bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org} 982d218783b5ca3a9706b143874e9372e469f3e6f71fschneider@chromium.org#endif // GTEST_HAS_STD_STRING 9839dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 9849dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#if GTEST_HAS_STD_WSTRING 9859dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.cominline String FormatForFailureMessage(const ::std::wstring& wstr) { 9869dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com return (Message() << "L\"" << wstr << '"').GetString(); 9879dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com} 9889dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#endif // GTEST_HAS_STD_WSTRING 9899dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 9909dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// These overloaded versions handle ::string and ::wstring. 9919dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#if GTEST_HAS_GLOBAL_STRING 9929dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.cominline String FormatForFailureMessage(const ::string& str) { 9939dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com return (Message() << '"' << str << '"').GetString(); 9944a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org} 9959dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#endif // GTEST_HAS_GLOBAL_STRING 99665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 99743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org#if GTEST_HAS_GLOBAL_WSTRING 998d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.cominline String FormatForFailureMessage(const ::wstring& wstr) { 999d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com return (Message() << "L\"" << wstr << '"').GetString(); 1000d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com} 100183a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org#endif // GTEST_HAS_GLOBAL_WSTRING 100243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 1003895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc) 100483a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org// operand to be used in a failure message. The type (but not value) 1005d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// of the other operand may affect the format. This allows us to 10067a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org// print a char* as a raw pointer when it is compared against another 100765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org// char*, and print it as a C string when it is compared against an 100865fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org// std::string object, for example. 100944bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org// 101065fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org// The default implementation ignores the type of the other operand. 101165fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org// Some specialized versions are used to handle formatting wide or 10129dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// narrow C strings. 1013d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// 1014d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 10156313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgtemplate <typename T1, typename T2> 10166313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgString FormatForComparisonFailureMessage(const T1& value, 1017f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org const T2& /* other_operand */) { 10184f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org return FormatForFailureMessage(value); 1019d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com} 10204f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.org 10214f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.org// The helper function for {ASSERT|EXPECT}_EQ. 10224f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.orgtemplate <typename T1, typename T2> 10234f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.orgAssertionResult CmpHelperEQ(const char* expected_expression, 10244f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.org const char* actual_expression, 10254f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.org const T1& expected, 10264f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.org const T2& actual) { 10274f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.org#ifdef _MSC_VER 10284f99be9ff2091451687891a05d99cc31990de709hpayer@chromium.org#pragma warning(push) // Saves the current warning state. 10297a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org#pragma warning(disable:4389) // Temporarily disables warning on 10309dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com // signed/unsigned mismatch. 10319dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#endif 103244bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 10339dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com if (expected == actual) { 10349dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com return AssertionSuccess(); 10359dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com } 10369dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 10379dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#ifdef _MSC_VER 10389dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#pragma warning(pop) // Restores the warning state. 10399dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#endif 104028a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org 10419dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com return EqFailure(expected_expression, 104244bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org actual_expression, 10439dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com FormatForComparisonFailureMessage(expected, actual), 10449dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com FormatForComparisonFailureMessage(actual, expected), 10459dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com false); 10469dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com} 10479dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 10489dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// With this overloaded version, we allow anonymous enums to be used 104944bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums 10504d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org// can be implicitly cast to BiggestInt. 10519dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comAssertionResult CmpHelperEQ(const char* expected_expression, 10529dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* actual_expression, 10539dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com BiggestInt expected, 105428a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org BiggestInt actual); 1055d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 10569dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// The helper class for {ASSERT|EXPECT}_EQ. The template argument 10579dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// lhs_is_null_literal is true iff the first argument to ASSERT_EQ() 10589dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// is a null pointer literal. The following default implementation is 10599dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// for lhs_is_null_literal being false. 10609dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comtemplate <bool lhs_is_null_literal> 1061f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgclass EqHelper { 10629dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com public: 10639dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com // This templatized version is for the general case. 10649dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com template <typename T1, typename T2> 10659dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com static AssertionResult Compare(const char* expected_expression, 10669dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* actual_expression, 10679dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const T1& expected, 10681fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org const T2& actual) { 10691fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return CmpHelperEQ(expected_expression, actual_expression, expected, 10704a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org actual); 10719dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com } 10729dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 10735d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // With this overloaded version, we allow anonymous enums to be used 10745d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous 10757a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org // enums can be implicitly cast to BiggestInt. 10769dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com // 10779dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com // Even though its body looks the same as the above version, we 1078be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org // cannot merge the two, as it will make anonymous enums unhappy. 1079be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org static AssertionResult Compare(const char* expected_expression, 10809dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* actual_expression, 10819dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com BiggestInt expected, 10829dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com BiggestInt actual) { 1083d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org return CmpHelperEQ(expected_expression, actual_expression, expected, 10849dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com actual); 10859dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com } 1086763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org}; 10879dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 10889dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// This specialization is used when the first argument to ASSERT_EQ() 1089763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// is a null pointer literal. 10909dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comtemplate <> 1091394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comclass EqHelper<true> { 1092394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com public: 1093394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com // We define two overloaded versions of Compare(). The first 1094394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com // version will be picked when the second argument to ASSERT_EQ() is 1095394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or 1096394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com // EXPECT_EQ(false, a_bool). 10975d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org template <typename T1, typename T2> 10985d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org static AssertionResult Compare(const char* expected_expression, 10995d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org const char* actual_expression, 11005d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org const T1& expected, 1101be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org const T2& actual) { 11025d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org return CmpHelperEQ(expected_expression, actual_expression, expected, 11035d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org actual); 11045d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org } 110583a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org 110643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org // This version will be picked when the second argument to 110783a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org // ASSERT_EQ() is a pointer, e.g. ASSERT_EQ(NULL, a_pointer). 11089dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com template <typename T1, typename T2> 11099dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com static AssertionResult Compare(const char* expected_expression, 11105d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org const char* actual_expression, 1111763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org const T1& /* expected */, 11129dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com T2* actual) { 11139dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com // We already know that 'expected' is a null pointer. 11149dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com return CmpHelperEQ(expected_expression, actual_expression, 11159dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com static_cast<T2*>(NULL), actual); 11169dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com } 111783a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org}; 11189dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 11199dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// A macro for implementing the helper functions needed to implement 1120355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org// ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste 11219dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// of similar code. 11229dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// 11235d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org// For each templatized helper function, we also define an overloaded 1124355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org// version for BiggestInt in order to reduce code bloat and allow 1125355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled 1126355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org// with gcc 4. 1127355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org// 1128355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 1129355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ 1130355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.orgtemplate <typename T1, typename T2>\ 113140cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.orgAssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 113243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org const T1& val1, const T2& val2) {\ 113343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org if (val1 op val2) {\ 11349dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com return AssertionSuccess();\ 1135f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com } else {\ 1136763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org Message msg;\ 1137763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org msg << "Expected: (" << expr1 << ") " #op " (" << expr2\ 1138763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\ 11399dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com << " vs " << FormatForComparisonFailureMessage(val2, val1);\ 11409dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com return AssertionFailure(msg);\ 11419dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com }\ 1142355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org}\ 1143fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.orgAssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 1144355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org BiggestInt val1, BiggestInt val2); 1145355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.org 11469dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 1147394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 11489dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// Implements the helper function for {ASSERT|EXPECT}_NE 11499a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgGTEST_IMPL_CMP_HELPER_(NE, !=) 1150f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org// Implements the helper function for {ASSERT|EXPECT}_LE 1151f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgGTEST_IMPL_CMP_HELPER_(LE, <=) 1152f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org// Implements the helper function for {ASSERT|EXPECT}_LT 1153a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.orgGTEST_IMPL_CMP_HELPER_(LT, < ) 1154394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// Implements the helper function for {ASSERT|EXPECT}_GE 115543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.orgGTEST_IMPL_CMP_HELPER_(GE, >=) 1156394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// Implements the helper function for {ASSERT|EXPECT}_GT 1157394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comGTEST_IMPL_CMP_HELPER_(GT, > ) 1158394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 1159394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com#undef GTEST_IMPL_CMP_HELPER_ 1160394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 1161763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// The helper function for {ASSERT|EXPECT}_STREQ. 1162763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// 116343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 1164763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.orgAssertionResult CmpHelperSTREQ(const char* expected_expression, 11659dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* actual_expression, 11669dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* expected, 11679dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* actual); 1168be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org 11699dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// The helper function for {ASSERT|EXPECT}_STRCASEEQ. 117043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// 11717a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 117228a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.orgAssertionResult CmpHelperSTRCASEEQ(const char* expected_expression, 11739dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* actual_expression, 11749dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* expected, 117543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org const char* actual); 1176eb7c144137bd7d461d4996f752f1353a0856fac1ricow@chromium.org 117743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// The helper function for {ASSERT|EXPECT}_STRNE. 11789dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// 11799dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 11809dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comAssertionResult CmpHelperSTRNE(const char* s1_expression, 11819dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* s2_expression, 1182394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com const char* s1, 11839dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* s2); 118443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 11859dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// The helper function for {ASSERT|EXPECT}_STRCASENE. 11869dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// 1187394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 118883a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.orgAssertionResult CmpHelperSTRCASENE(const char* s1_expression, 118943c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org const char* s2_expression, 11907a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org const char* s1, 119183a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org const char* s2); 11929dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 1193394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 1194394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// Helper function for *_STREQ on wide strings. 1195394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// 1196394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 1197394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comAssertionResult CmpHelperSTREQ(const char* expected_expression, 11989dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* actual_expression, 11999dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const wchar_t* expected, 12009dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const wchar_t* actual); 1201763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org 1202763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// Helper function for *_STRNE on wide strings. 12039dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// 1204badaffc570baec00166b0ad3bdc96995751a7e13ricow@chromium.org// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 120528a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.orgAssertionResult CmpHelperSTRNE(const char* s1_expression, 120643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org const char* s2_expression, 12079dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const wchar_t* s1, 12089dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const wchar_t* s2); 12099dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 12109dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com} // namespace internal 121143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 12129dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// IsSubstring() and IsNotSubstring() are intended to be used as the 12135f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by 1214be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org// themselves. They check whether needle is a substring of haystack 12155f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org// (NULL is considered a substring of itself only), and return an 12169dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// appropriate error message when they fail. 12179dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// 12189dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// The {needle,haystack}_expr arguments are the stringified 12199dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// expressions that generated the two real arguments. 12209dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comAssertionResult IsSubstring( 12219dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* needle_expr, const char* haystack_expr, 122228a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.org const char* needle, const char* haystack); 12239dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comAssertionResult IsSubstring( 12249dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* needle_expr, const char* haystack_expr, 1225cddc71f18a46e6117cc765b1c53ca122e7aaa318rossberg@chromium.org const wchar_t* needle, const wchar_t* haystack); 1226a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgAssertionResult IsNotSubstring( 12279dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* needle_expr, const char* haystack_expr, 12289dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* needle, const char* haystack); 122928a37086dc5bb171203246e0d9701882d56d6e81rossberg@chromium.orgAssertionResult IsNotSubstring( 1230fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org const char* needle_expr, const char* haystack_expr, 12319dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const wchar_t* needle, const wchar_t* haystack); 12329dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com#if GTEST_HAS_STD_STRING 1233be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.orgAssertionResult IsSubstring( 12349dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const char* needle_expr, const char* haystack_expr, 12359dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com const ::std::string& needle, const ::std::string& haystack); 12369dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comAssertionResult IsNotSubstring( 1237b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org const char* needle_expr, const char* haystack_expr, 1238b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org const ::std::string& needle, const ::std::string& haystack); 12391fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#endif // GTEST_HAS_STD_STRING 12401fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 12411fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#if GTEST_HAS_STD_WSTRING 12421fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgAssertionResult IsSubstring( 12431fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org const char* needle_expr, const char* haystack_expr, 12441fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org const ::std::wstring& needle, const ::std::wstring& haystack); 12451fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgAssertionResult IsNotSubstring( 12461845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org const char* needle_expr, const char* haystack_expr, 12471845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org const ::std::wstring& needle, const ::std::wstring& haystack); 12481fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org#endif // GTEST_HAS_STD_WSTRING 12491fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 12501fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgnamespace internal { 12511fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 12521fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// Helper template function for comparing floating-points. 12531fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// 12541fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// Template parameter: 12551fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// 12561fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// RawType: the raw floating-point type (either float or double) 12571fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// 12581fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 12591fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgtemplate <typename RawType> 12601fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgAssertionResult CmpHelperFloatingPointEQ(const char* expected_expression, 12611fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org const char* actual_expression, 12621fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org RawType expected, 12631fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org RawType actual) { 12641fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org const FloatingPoint<RawType> lhs(expected), rhs(actual); 12651fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 12661fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org if (lhs.AlmostEquals(rhs)) { 12671fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return AssertionSuccess(); 12681fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 12691fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 12701fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org StrStream expected_ss; 12711fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 12721fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org << expected; 12731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 12741fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org StrStream actual_ss; 12751fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 12761fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org << actual; 12771fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 12781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return EqFailure(expected_expression, 12791fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org actual_expression, 12801fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org StrStreamToString(&expected_ss), 128121b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org StrStreamToString(&actual_ss), 128221b5e95db1c650dfc2ba8e11d010bb01293f85c5vegorov@chromium.org false); 12839dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com} 12845d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org 12855d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org// Helper function for implementing ASSERT_NEAR. 12865d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org// 12875d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 12885d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.orgAssertionResult DoubleNearPredFormat(const char* expr1, 12895d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org const char* expr2, 12905d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org const char* abs_error_expr, 1291ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org double val1, 12925d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org double val2, 1293ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org double abs_error); 12942c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org 1295662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. 12969dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// A class that enables one to stream messages to assertion macros 12979dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comclass AssertHelper { 1298763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org public: 12999dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com // Constructor. 1300ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org AssertHelper(TestPartResultType type, const char* file, int line, 1301ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org const char* message); 1302ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Message assignment is a semantic trick to enable assertion 130347390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org // streaming; see the GTEST_MESSAGE_ macro below. 13049dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com void operator=(const Message& message) const; 13054a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org private: 1306b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org TestPartResultType const type_; 1307b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org const char* const file_; 1308b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org int const line_; 1309b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org String const message_; 1310b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 1311030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); 1312b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org}; 1313b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 1314b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org} // namespace internal 1315a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org 1316a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org#if GTEST_HAS_PARAM_TEST 1317a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// The abstract base class that all value-parameterized tests inherit from. 1318a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// 1319a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// This class adds support for accessing the test parameter value via 1320a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// the GetParam() method. 1321a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// 1322a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// Use it with one of the parameter generator defining functions, like Range(), 1323a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// Values(), ValuesIn(), Bool(), and Combine(). 1324a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// 1325a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// class FooTest : public ::testing::TestWithParam<int> { 1326a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// protected: 1327a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// FooTest() { 1328a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// // Can use GetParam() here. 1329a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// } 1330a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// virtual ~FooTest() { 1331a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// // Can use GetParam() here. 1332a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// } 1333a2c0c1516848536a514b3178d2c040b7df0ceb5bmachenbach@chromium.org// virtual void SetUp() { 13349d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org// // Can use GetParam() here. 1335486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// } 1336486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// virtual void TearDown { 13372ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// // Can use GetParam() here. 13382ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// } 13392ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// }; 13402ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// TEST_P(FooTest, DoesBar) { 13412ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// // Can use GetParam() method here. 13422ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// Foo foo; 1343486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org// ASSERT_TRUE(foo.DoesBar(GetParam())); 13442ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// } 13457a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); 13462ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org 13472ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.orgtemplate <typename T> 13482ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.orgclass TestWithParam : public Test { 13492ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org public: 135043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org typedef T ParamType; 13512ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org 13522ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org // The current parameter value. Is also available in the test fixture's 13532ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org // constructor. 13542ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org const ParamType& GetParam() const { return *parameter_; } 13552ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org 13562ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org private: 1357486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org // Sets parameter value. The caller is responsible for making sure the value 13582ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org // remains alive and unchanged throughout the current test. 13592ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org static void SetParam(const ParamType* parameter) { 13602ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org parameter_ = parameter; 13612ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org } 13622ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org 13632ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org // Static value used for accessing parameter during a test lifetime. 136483a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org static const ParamType* parameter_; 13652ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org 136643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org // TestClass must be a subclass of TestWithParam<T>. 13672ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org template <class TestClass> friend class internal::ParameterizedTestFactory; 13682ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org}; 136946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 13702ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.orgtemplate <typename T> 137146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgconst T* TestWithParam<T>::parameter_ = NULL; 13727a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org 137383a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org#endif // GTEST_HAS_PARAM_TEST 13742ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org 13757a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org// Macros for indicating success/failure in test code. 13762ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org 13772ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// ADD_FAILURE unconditionally adds a failure to the current test. 137843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// SUCCEED generates a success - it doesn't automatically make the 13792ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// current test successful, as a test is only successful when it has 13802ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// no failure. 13812ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// 13822ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// EXPECT_* verifies that a certain condition is satisfied. If not, 13832ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// it behaves like ADD_FAILURE. In particular: 13842ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// 13859aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// EXPECT_TRUE verifies that a Boolean condition is true. 13869aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// EXPECT_FALSE verifies that a Boolean condition is false. 13879d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org// 13889aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except 13899d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org// that they will also abort the current function on failure. People 13909d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org// usually want the fail-fast behavior of FAIL and ASSERT_*, but those 13919d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org// writing data-driven tests often find themselves using ADD_FAILURE 13929cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org// and EXPECT_* more. 13939cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org// 13949cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org// Examples: 13959cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org// 13962ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// EXPECT_TRUE(server.StatusIsOK()); 13972ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// ASSERT_FALSE(server.HasPendingRequest(port)) 13982ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// << "There are still pending requests " << "on port " << port; 1399486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 1400486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// Generates a nonfatal failure with a generic message. 1401e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") 14022ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org 14032ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// Generates a fatal failure with a generic message. 14042ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org#define FAIL() GTEST_FATAL_FAILURE_("Failed") 1405486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 14062ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// Generates a success with a generic message. 1407486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org#define SUCCEED() GTEST_SUCCESS_("Succeeded") 14082ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org 14097a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org// Macros for testing exceptions. 14102ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// 14112ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// * {ASSERT|EXPECT}_THROW(statement, expected_exception): 14122ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// Tests that the statement throws the expected exception. 141343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// * {ASSERT|EXPECT}_NO_THROW(statement): 14142ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// Tests that the statement doesn't throw any exception. 14152ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// * {ASSERT|EXPECT}_ANY_THROW(statement): 14162ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// Tests that the statement throws an exception. 14172ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org 14182ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org#define EXPECT_THROW(statement, expected_exception) \ 14197a1bfbe9bc8295770315c55f7ce40822b7951aabmachenbach@chromium.org GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) 14202ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org#define EXPECT_NO_THROW(statement) \ 14215d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) 14225d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org#define EXPECT_ANY_THROW(statement) \ 14235d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) 14245d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org#define ASSERT_THROW(statement, expected_exception) \ 1425486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) 14262ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org#define ASSERT_NO_THROW(statement) \ 14272ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) 14282ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org#define ASSERT_ANY_THROW(statement) \ 14299d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) 1430486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 1431486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// Boolean assertions. 1432486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org#define EXPECT_TRUE(condition) \ 14332ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 14342ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org GTEST_NONFATAL_FAILURE_) 14352ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org#define EXPECT_FALSE(condition) \ 14362ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 14372ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org GTEST_NONFATAL_FAILURE_) 14389d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org#define ASSERT_TRUE(condition) \ 1439b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \ 14409d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org GTEST_FATAL_FAILURE_) 14412ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org#define ASSERT_FALSE(condition) \ 1442b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 1443486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org GTEST_FATAL_FAILURE_) 144443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 1445486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org// Includes the auto-generated header that implements a family of 1446486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org// generic predicate assertion macros. 1447486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org#include <gtest/gtest_pred_impl.h> 1448486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 1449486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org// Macros for testing equalities and inequalities. 1450a8bb4d938869bdcdf759625ee868775ff24826d9svenpanne@chromium.org// 1451486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org// * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual 1452a8bb4d938869bdcdf759625ee868775ff24826d9svenpanne@chromium.org// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 145347390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 1454a8bb4d938869bdcdf759625ee868775ff24826d9svenpanne@chromium.org// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 14552ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 1456486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 14572ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// 14582ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// When they are not, Google Test prints both the tested expressions and 14592ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// their actual values. The values must be compatible built-in types, 14602ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// or you will get a compiler error. By "compatible" we mean that the 1461030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org// values can be compared by the respective operator. 1462030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org// 1463030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org// Note: 1464030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org// 1465030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org// 1. It is possible to make a user-defined type work with 1466486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// {ASSERT|EXPECT}_??(), but that requires overloading the 1467486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// comparison operators and is thus discouraged by the Google C++ 1468486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// Usage Guide. Therefore, you are advised to use the 1469486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// {ASSERT|EXPECT}_TRUE() macro to assert that two objects are 1470f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org// equal. 14719aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// 14729aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on 14739d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org// pointers (in particular, C strings). Therefore, if you use it 14749aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// with two C strings, you are testing how their locations in memory 14759d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org// are related, not how their content is related. To compare two C 14769d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org// strings by content, use {ASSERT|EXPECT}_STR*(). 14779cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org// 1478486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// 3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to 1479486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you 1480486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// what the actual value is when it fails, and similarly for the 14812ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org// other comparisons. 1482486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// 1483486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// 4. Do not depend on the order in which {ASSERT|EXPECT}_??() 1484486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// evaluate their arguments, which is undefined. 1485f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org// 1486f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org// 5. These macros evaluate their arguments exactly once. 1487c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// 1488c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// Examples: 1489c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// 1490c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// EXPECT_NE(5, Foo()); 1491c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// EXPECT_EQ(NULL, a_pointer); 1492c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// ASSERT_LT(i, array_size); 1493e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org// ASSERT_GT(records.size(), 0) << "There is no record left."; 1494c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org 1495c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org#define EXPECT_EQ(expected, actual) \ 1496c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org EXPECT_PRED_FORMAT2(::testing::internal:: \ 1497c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \ 1498c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org expected, actual) 1499c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org#define EXPECT_NE(expected, actual) \ 1500c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual) 1501c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org#define EXPECT_LE(val1, val2) \ 1502c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 1503c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org#define EXPECT_LT(val1, val2) \ 1504c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 1505c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org#define EXPECT_GE(val1, val2) \ 1506c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 1507c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org#define EXPECT_GT(val1, val2) \ 1508c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 1509c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org 1510c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org#define ASSERT_EQ(expected, actual) \ 1511c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org ASSERT_PRED_FORMAT2(::testing::internal:: \ 1512c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \ 1513c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org expected, actual) 1514ac45fedf88208de9636b896863f0942bae969d67jkummerow@chromium.org#define ASSERT_NE(val1, val2) \ 1515c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 1516e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org#define ASSERT_LE(val1, val2) \ 1517e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 1518486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org#define ASSERT_LT(val1, val2) \ 1519c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 1520c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org#define ASSERT_GE(val1, val2) \ 1521c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 1522c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org#define ASSERT_GT(val1, val2) \ 1523c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 1524c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org 1525c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// C String Comparisons. All tests treat NULL and any non-NULL string 1526c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// as different. Two NULLs are equal. 1527c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// 1528486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 1529c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 1530c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case 1531c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case 153247390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org// 1533c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// For wide or narrow string objects, you can use the 1534c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// {ASSERT|EXPECT}_??() macros. 1535e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org// 1536c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// Don't depend on the order in which the arguments are evaluated, 1537c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// which is undefined. 1538c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// 1539c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org// These macros evaluate their arguments exactly once. 1540c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org 1541486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org#define EXPECT_STREQ(expected, actual) \ 1542486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) 1543c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org#define EXPECT_STRNE(s1, s2) \ 1544486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 1545486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org#define EXPECT_STRCASEEQ(expected, actual) \ 1546b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) 1547486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org#define EXPECT_STRCASENE(s1, s2)\ 1548f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 1549486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org 1550486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org#define ASSERT_STREQ(expected, actual) \ 1551486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual) 15529d1a7a8cdb664730cf5703185e85a4716748c564machenbach@chromium.org#define ASSERT_STRNE(s1, s2) \ 1553486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 1554763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org#define ASSERT_STRCASEEQ(expected, actual) \ 155580c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual) 15564c3ce7c3fd2802da8f91c6516a9c9aea3cd93f1emachenbach@chromium.org#define ASSERT_STRCASENE(s1, s2)\ 155780c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 155880c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 1559486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org// Macros for comparing floating-point numbers. 15609dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// 1561b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual): 1562b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// Tests that two float values are almost equal. 1563b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual): 1564b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// Tests that two double values are almost equal. 1565b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): 1566b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// Tests that v1 and v2 are within the given distance to each other. 1567c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org// 1568b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// Google Test uses ULP-based comparison to automatically pick a default 1569b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// error bound that is appropriate for the operands. See the 1570c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org// FloatingPoint template class in gtest-internal.h if you are 1571c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org// interested in the implementation details. 1572c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org 157343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org#define EXPECT_FLOAT_EQ(expected, actual)\ 157443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 1575b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org expected, actual) 157665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 157743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org#define EXPECT_DOUBLE_EQ(expected, actual)\ 1578c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 1579486075aa3f2e6d0031ff182961b9eab00e1081d8jkummerow@chromium.org expected, actual) 1580c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org 1581b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org#define ASSERT_FLOAT_EQ(expected, actual)\ 1582b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 1583763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org expected, actual) 1584b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 1585b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org#define ASSERT_DOUBLE_EQ(expected, actual)\ 1586b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 158747390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org expected, actual) 158843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 1589c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org#define EXPECT_NEAR(val1, val2, abs_error)\ 1590c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 1591c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org val1, val2, abs_error) 1592c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org 15932bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org#define ASSERT_NEAR(val1, val2, abs_error)\ 1594c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 1595c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org val1, val2, abs_error) 1596c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org 1597763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// These predicate format functions work on floating-point values, and 1598c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. 159947390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org// 1600763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); 1601c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org 1602c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org// Asserts that val1 is less than, or almost equal to, val2. Fails 1603c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org// otherwise. In particular, it fails if either val1 or val2 is NaN. 1604c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.orgAssertionResult FloatLE(const char* expr1, const char* expr2, 1605c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org float val1, float val2); 160643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.orgAssertionResult DoubleLE(const char* expr1, const char* expr2, 160743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org double val1, double val2); 160843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 160943c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 1610c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org#if GTEST_OS_WINDOWS 1611c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org 161243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// Macros that test for HRESULT failure and success, these are only useful 161343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// on Windows, and rely on Windows SDK macros and APIs to compile. 1614c4e51ac6d26b42753a57a4a9e4a419243b50151clrn@chromium.org// 16154a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) 1616b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// 1617b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// When expr unexpectedly fails or succeeds, Google Test prints the 1618b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// expected result and the actual result with both a human-readable 16192c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// string representation of the error, if available, as well as the 16202c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// hex result code. 16212c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#define EXPECT_HRESULT_SUCCEEDED(expr) \ 16222c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 16232c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 16242c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#define ASSERT_HRESULT_SUCCEEDED(expr) \ 16252c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 16262c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 16272c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#define EXPECT_HRESULT_FAILED(expr) \ 1628b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 1629b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 1630e8412be858dc48afaec4959e42c5932f71a7f29bmachenbach@chromium.org#define ASSERT_HRESULT_FAILED(expr) \ 16317ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 1632f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 1633ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org#endif // GTEST_OS_WINDOWS 1634ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1635ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// Macros that execute statement and check that it doesn't generate new fatal 1636ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// failures in the current thread. 1637ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// 1638ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); 1639f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org// 1640a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org// Examples: 1641874aad37f2a832804012c6f56739f4fc6c9283cdmachenbach@chromium.org// 1642f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org// EXPECT_NO_FATAL_FAILURE(Process()); 164343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; 1644763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// 164571fc3467b5396c27d0b701d88e196e88c78d8864mstarzinger@chromium.org#define ASSERT_NO_FATAL_FAILURE(statement) \ 164671fc3467b5396c27d0b701d88e196e88c78d8864mstarzinger@chromium.org GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) 164771fc3467b5396c27d0b701d88e196e88c78d8864mstarzinger@chromium.org#define EXPECT_NO_FATAL_FAILURE(statement) \ 164847390597afd6b17870f41dfb5dd8c057aea1f068machenbach@chromium.org GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) 1649f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org 165043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// Causes a trace (including the source file path, the current line 165143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// number, and the given message) to be included in every test failure 165271fc3467b5396c27d0b701d88e196e88c78d8864mstarzinger@chromium.org// message generated by code in the current scope. The effect is 165371fc3467b5396c27d0b701d88e196e88c78d8864mstarzinger@chromium.org// undone when the control leaves the current scope. 165471fc3467b5396c27d0b701d88e196e88c78d8864mstarzinger@chromium.org// 1655f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org// The message argument can be anything streamable to std::ostream. 1656f8c6bd531c2a8ba717cb8d316206347b05acebedmstarzinger@chromium.org// 1657b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// In the implementation, we include the current line number as part 1658b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s 1659b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// to appear in the same block - as long as they are on different 1660b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// lines. 1661b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org#define SCOPED_TRACE(message) \ 1662b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ 1663e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org __FILE__, __LINE__, ::testing::Message() << (message)) 1664e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org 1665e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.orgnamespace internal { 16667028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 1667e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org// This template is declared, but intentionally undefined. 16685a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.orgtemplate <typename T1, typename T2> 1669b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgstruct StaticAssertTypeEqHelper; 1670b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 1671b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgtemplate <typename T> 1672b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgstruct StaticAssertTypeEqHelper<T, T> {}; 1673b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 1674b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org} // namespace internal 1675b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 1676763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// Compile-time assertion for type equality. 1677b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// StaticAssertTypeEq<type1, type2>() compiles iff type1 and type2 are 1678b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// the same type. The value it returns is not interesting. 1679b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// 1680b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// Instead of making StaticAssertTypeEq a class template, we make it a 1681b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// function template that invokes a helper class template. This 1682b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// prevents a user from misusing StaticAssertTypeEq<T1, T2> by 1683e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org// defining objects of that type. 1684b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// 1685b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// CAVEAT: 16861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// 1687e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org// When used inside a method of a class template, 168840cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org// StaticAssertTypeEq<T1, T2>() is effective ONLY IF the method is 16899aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// instantiated. For example, given: 16909aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// 16919aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// template <typename T> class Foo { 1692f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org// public: 1693d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org// void Bar() { testing::StaticAssertTypeEq<int, T>(); } 169440cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org// }; 169540cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org// 1696e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org// the code: 1697b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// 1698b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// void Test1() { Foo<bool> foo; } 1699763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// 17004a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// will NOT generate a compiler error, as Foo<bool>::Bar() is never 17014a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// actually instantiated. Instead, you need: 1702e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org// 1703f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org// void Test2() { Foo<bool> foo; foo.Bar(); } 1704f15d0cdbef11a212e108432465f014a7d3c3aa12machenbach@chromium.org// 1705e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org// to cause a compiler error. 1706e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.orgtemplate <typename T1, typename T2> 1707e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.orgbool StaticAssertTypeEq() { 1708b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org internal::StaticAssertTypeEqHelper<T1, T2>(); 1709750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org return true; 1710763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org} 1711750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 1712750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org// Defines a test. 1713750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org// 1714750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org// The first parameter is the name of the test case, and the second 1715750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org// parameter is the name of the test within the test case. 1716750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org// 1717750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org// The convention is to end the test case name with "Test". For 1718b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// example, a test case for the Foo class can be named FooTest. 17192c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// 17202c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// The user should put his test code between braces after using this 17212c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// macro. Example: 17222c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// 1723b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// TEST(FooTest, InitializesCorrectly) { 1724b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// Foo foo; 1725b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// EXPECT_TRUE(foo.StatusIsOK()); 1726b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// } 17272c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 17282c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// Note that we call GetTestTypeId() instead of GetTypeId< 17292c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// ::testing::Test>() here to get the type ID of testing::Test. This 17302c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// is to work around a suspected linker bug when using Google Test as 17312c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// a framework on Mac OS X. The bug causes GetTypeId< 1732763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// ::testing::Test>() to return different values depending on whether 17332c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// the call is from the Google Test framework itself or from user test 17342c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// code. GetTestTypeId() is guaranteed to always return the same 17352c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// value, as it always calls GetTypeId<>() from the Google Test 17362c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// framework. 1737248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org#define TEST(test_case_name, test_name)\ 17382c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org GTEST_TEST_(test_case_name, test_name, \ 17392c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org ::testing::Test, ::testing::internal::GetTestTypeId()) 1740ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1741e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org 1742763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org// Defines a test that uses a test fixture. 1743ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// 1744ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// The first parameter is the name of the test fixture class, which 1745ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// also doubles as the test case name. The second parameter is the 1746b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// name of the test within the test case. 17474a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// 1748b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// A test fixture class must be declared earlier. The user should put 17494a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org// his test code between braces after using this macro. Example: 1750b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// 1751b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// class FooTest : public testing::Test { 1752b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// protected: 1753b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// virtual void SetUp() { b_.AddElement(3); } 1754b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// 1755b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org// Foo a_; 17569dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// Foo b_; 17577ff7607c2315ea91e4d13330ce14125e4bb4851amachenbach@chromium.org// }; 175837be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org// 175937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org// TEST_F(FooTest, InitializesCorrectly) { 176037be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org// EXPECT_TRUE(a_.StatusIsOK()); 176137be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org// } 17629dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// 17639dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// TEST_F(FooTest, ReturnsElementCountCorrectly) { 1764394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// EXPECT_EQ(0, a_.size()); 1765e3c177a423baa3c30225c4e422b6f6c76d38b951machenbach@chromium.org// EXPECT_EQ(1, b_.size()); 1766394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// } 1767394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 1768830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org#define TEST_F(test_fixture, test_name)\ 1769830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org GTEST_TEST_(test_fixture, test_name, test_fixture, \ 1770394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com ::testing::internal::GetTypeId<test_fixture>()) 1771394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 17729dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com// Use this macro in main() to run all tests. It returns 0 if all 17739cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org// tests are successful, or 1 otherwise. 1774c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org// 1775c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org// RUN_ALL_TESTS() should be invoked after the command line has been 1776c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org// parsed by InitGoogleTest(). 1777c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 1778c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org#define RUN_ALL_TESTS()\ 1779c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org (::testing::UnitTest::GetInstance()->Run()) 1780e31b63e9608909e17e35a3330b0075140af2fe91machenbach@chromium.org 178143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org} // namespace testing 1782763da4c1a1bd42dfafe0844b4c18f4882cc66352machenbach@chromium.org 1783e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif // GTEST_INCLUDE_GTEST_GTEST_H_ 1784e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org