113481Sgiacomo.travaglini@arm.com// Copyright 2005, Google Inc. 213481Sgiacomo.travaglini@arm.com// All rights reserved. 313481Sgiacomo.travaglini@arm.com// 413481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without 513481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are 613481Sgiacomo.travaglini@arm.com// met: 713481Sgiacomo.travaglini@arm.com// 813481Sgiacomo.travaglini@arm.com// * Redistributions of source code must retain the above copyright 913481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer. 1013481Sgiacomo.travaglini@arm.com// * Redistributions in binary form must reproduce the above 1113481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer 1213481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the 1313481Sgiacomo.travaglini@arm.com// distribution. 1413481Sgiacomo.travaglini@arm.com// * Neither the name of Google Inc. nor the names of its 1513481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from 1613481Sgiacomo.travaglini@arm.com// this software without specific prior written permission. 1713481Sgiacomo.travaglini@arm.com// 1813481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1913481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2013481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2113481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2213481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2313481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2413481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2513481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2613481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2713481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2813481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2913481Sgiacomo.travaglini@arm.com// 3013481Sgiacomo.travaglini@arm.com// Author: wan@google.com (Zhanyong Wan) 3113481Sgiacomo.travaglini@arm.com// 3213481Sgiacomo.travaglini@arm.com// The Google C++ Testing Framework (Google Test) 3313481Sgiacomo.travaglini@arm.com// 3413481Sgiacomo.travaglini@arm.com// This header file defines the public API for Google Test. It should be 3513481Sgiacomo.travaglini@arm.com// included by any test program that uses Google Test. 3613481Sgiacomo.travaglini@arm.com// 3713481Sgiacomo.travaglini@arm.com// IMPORTANT NOTE: Due to limitation of the C++ language, we have to 3813481Sgiacomo.travaglini@arm.com// leave some internal implementation details in this header file. 3913481Sgiacomo.travaglini@arm.com// They are clearly marked by comments like this: 4013481Sgiacomo.travaglini@arm.com// 4113481Sgiacomo.travaglini@arm.com// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 4213481Sgiacomo.travaglini@arm.com// 4313481Sgiacomo.travaglini@arm.com// Such code is NOT meant to be used by a user directly, and is subject 4413481Sgiacomo.travaglini@arm.com// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user 4513481Sgiacomo.travaglini@arm.com// program! 4613481Sgiacomo.travaglini@arm.com// 4713481Sgiacomo.travaglini@arm.com// Acknowledgment: Google Test borrowed the idea of automatic test 4813481Sgiacomo.travaglini@arm.com// registration from Barthelemy Dagenais' (barthelemy@prologique.com) 4913481Sgiacomo.travaglini@arm.com// easyUnit framework. 5013481Sgiacomo.travaglini@arm.com 5113481Sgiacomo.travaglini@arm.com#ifndef GTEST_INCLUDE_GTEST_GTEST_H_ 5213481Sgiacomo.travaglini@arm.com#define GTEST_INCLUDE_GTEST_GTEST_H_ 5313481Sgiacomo.travaglini@arm.com 5413481Sgiacomo.travaglini@arm.com#include <limits> 5513481Sgiacomo.travaglini@arm.com#include <ostream> 5613481Sgiacomo.travaglini@arm.com#include <vector> 5713481Sgiacomo.travaglini@arm.com 5813481Sgiacomo.travaglini@arm.com#include "gtest/internal/gtest-internal.h" 5913481Sgiacomo.travaglini@arm.com#include "gtest/internal/gtest-string.h" 6013481Sgiacomo.travaglini@arm.com#include "gtest/gtest-death-test.h" 6113481Sgiacomo.travaglini@arm.com#include "gtest/gtest-message.h" 6213481Sgiacomo.travaglini@arm.com#include "gtest/gtest-param-test.h" 6313481Sgiacomo.travaglini@arm.com#include "gtest/gtest-printers.h" 6413481Sgiacomo.travaglini@arm.com#include "gtest/gtest_prod.h" 6513481Sgiacomo.travaglini@arm.com#include "gtest/gtest-test-part.h" 6613481Sgiacomo.travaglini@arm.com#include "gtest/gtest-typed-test.h" 6713481Sgiacomo.travaglini@arm.com 6813481Sgiacomo.travaglini@arm.com// Depending on the platform, different string classes are available. 6913481Sgiacomo.travaglini@arm.com// On Linux, in addition to ::std::string, Google also makes use of 7013481Sgiacomo.travaglini@arm.com// class ::string, which has the same interface as ::std::string, but 7113481Sgiacomo.travaglini@arm.com// has a different implementation. 7213481Sgiacomo.travaglini@arm.com// 7313481Sgiacomo.travaglini@arm.com// You can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that 7413481Sgiacomo.travaglini@arm.com// ::string is available AND is a distinct type to ::std::string, or 7513481Sgiacomo.travaglini@arm.com// define it to 0 to indicate otherwise. 7613481Sgiacomo.travaglini@arm.com// 7713481Sgiacomo.travaglini@arm.com// If ::std::string and ::string are the same class on your platform 7813481Sgiacomo.travaglini@arm.com// due to aliasing, you should define GTEST_HAS_GLOBAL_STRING to 0. 7913481Sgiacomo.travaglini@arm.com// 8013481Sgiacomo.travaglini@arm.com// If you do not define GTEST_HAS_GLOBAL_STRING, it is defined 8113481Sgiacomo.travaglini@arm.com// heuristically. 8213481Sgiacomo.travaglini@arm.com 8313481Sgiacomo.travaglini@arm.comnamespace testing { 8413481Sgiacomo.travaglini@arm.com 8513481Sgiacomo.travaglini@arm.com// Declares the flags. 8613481Sgiacomo.travaglini@arm.com 8713481Sgiacomo.travaglini@arm.com// This flag temporary enables the disabled tests. 8813481Sgiacomo.travaglini@arm.comGTEST_DECLARE_bool_(also_run_disabled_tests); 8913481Sgiacomo.travaglini@arm.com 9013481Sgiacomo.travaglini@arm.com// This flag brings the debugger on an assertion failure. 9113481Sgiacomo.travaglini@arm.comGTEST_DECLARE_bool_(break_on_failure); 9213481Sgiacomo.travaglini@arm.com 9313481Sgiacomo.travaglini@arm.com// This flag controls whether Google Test catches all test-thrown exceptions 9413481Sgiacomo.travaglini@arm.com// and logs them as failures. 9513481Sgiacomo.travaglini@arm.comGTEST_DECLARE_bool_(catch_exceptions); 9613481Sgiacomo.travaglini@arm.com 9713481Sgiacomo.travaglini@arm.com// This flag enables using colors in terminal output. Available values are 9813481Sgiacomo.travaglini@arm.com// "yes" to enable colors, "no" (disable colors), or "auto" (the default) 9913481Sgiacomo.travaglini@arm.com// to let Google Test decide. 10013481Sgiacomo.travaglini@arm.comGTEST_DECLARE_string_(color); 10113481Sgiacomo.travaglini@arm.com 10213481Sgiacomo.travaglini@arm.com// This flag sets up the filter to select by name using a glob pattern 10313481Sgiacomo.travaglini@arm.com// the tests to run. If the filter is not given all tests are executed. 10413481Sgiacomo.travaglini@arm.comGTEST_DECLARE_string_(filter); 10513481Sgiacomo.travaglini@arm.com 10613481Sgiacomo.travaglini@arm.com// This flag causes the Google Test to list tests. None of the tests listed 10713481Sgiacomo.travaglini@arm.com// are actually run if the flag is provided. 10813481Sgiacomo.travaglini@arm.comGTEST_DECLARE_bool_(list_tests); 10913481Sgiacomo.travaglini@arm.com 11013481Sgiacomo.travaglini@arm.com// This flag controls whether Google Test emits a detailed XML report to a file 11113481Sgiacomo.travaglini@arm.com// in addition to its normal textual output. 11213481Sgiacomo.travaglini@arm.comGTEST_DECLARE_string_(output); 11313481Sgiacomo.travaglini@arm.com 11413481Sgiacomo.travaglini@arm.com// This flags control whether Google Test prints the elapsed time for each 11513481Sgiacomo.travaglini@arm.com// test. 11613481Sgiacomo.travaglini@arm.comGTEST_DECLARE_bool_(print_time); 11713481Sgiacomo.travaglini@arm.com 11813481Sgiacomo.travaglini@arm.com// This flag specifies the random number seed. 11913481Sgiacomo.travaglini@arm.comGTEST_DECLARE_int32_(random_seed); 12013481Sgiacomo.travaglini@arm.com 12113481Sgiacomo.travaglini@arm.com// This flag sets how many times the tests are repeated. The default value 12213481Sgiacomo.travaglini@arm.com// is 1. If the value is -1 the tests are repeating forever. 12313481Sgiacomo.travaglini@arm.comGTEST_DECLARE_int32_(repeat); 12413481Sgiacomo.travaglini@arm.com 12513481Sgiacomo.travaglini@arm.com// This flag controls whether Google Test includes Google Test internal 12613481Sgiacomo.travaglini@arm.com// stack frames in failure stack traces. 12713481Sgiacomo.travaglini@arm.comGTEST_DECLARE_bool_(show_internal_stack_frames); 12813481Sgiacomo.travaglini@arm.com 12913481Sgiacomo.travaglini@arm.com// When this flag is specified, tests' order is randomized on every iteration. 13013481Sgiacomo.travaglini@arm.comGTEST_DECLARE_bool_(shuffle); 13113481Sgiacomo.travaglini@arm.com 13213481Sgiacomo.travaglini@arm.com// This flag specifies the maximum number of stack frames to be 13313481Sgiacomo.travaglini@arm.com// printed in a failure message. 13413481Sgiacomo.travaglini@arm.comGTEST_DECLARE_int32_(stack_trace_depth); 13513481Sgiacomo.travaglini@arm.com 13613481Sgiacomo.travaglini@arm.com// When this flag is specified, a failed assertion will throw an 13713481Sgiacomo.travaglini@arm.com// exception if exceptions are enabled, or exit the program with a 13813481Sgiacomo.travaglini@arm.com// non-zero code otherwise. 13913481Sgiacomo.travaglini@arm.comGTEST_DECLARE_bool_(throw_on_failure); 14013481Sgiacomo.travaglini@arm.com 14113481Sgiacomo.travaglini@arm.com// When this flag is set with a "host:port" string, on supported 14213481Sgiacomo.travaglini@arm.com// platforms test results are streamed to the specified port on 14313481Sgiacomo.travaglini@arm.com// the specified host machine. 14413481Sgiacomo.travaglini@arm.comGTEST_DECLARE_string_(stream_result_to); 14513481Sgiacomo.travaglini@arm.com 14613481Sgiacomo.travaglini@arm.com// The upper limit for valid stack trace depths. 14713481Sgiacomo.travaglini@arm.comconst int kMaxStackTraceDepth = 100; 14813481Sgiacomo.travaglini@arm.com 14913481Sgiacomo.travaglini@arm.comnamespace internal { 15013481Sgiacomo.travaglini@arm.com 15113481Sgiacomo.travaglini@arm.comclass AssertHelper; 15213481Sgiacomo.travaglini@arm.comclass DefaultGlobalTestPartResultReporter; 15313481Sgiacomo.travaglini@arm.comclass ExecDeathTest; 15413481Sgiacomo.travaglini@arm.comclass NoExecDeathTest; 15513481Sgiacomo.travaglini@arm.comclass FinalSuccessChecker; 15613481Sgiacomo.travaglini@arm.comclass GTestFlagSaver; 15713481Sgiacomo.travaglini@arm.comclass StreamingListenerTest; 15813481Sgiacomo.travaglini@arm.comclass TestResultAccessor; 15913481Sgiacomo.travaglini@arm.comclass TestEventListenersAccessor; 16013481Sgiacomo.travaglini@arm.comclass TestEventRepeater; 16113481Sgiacomo.travaglini@arm.comclass UnitTestRecordPropertyTestHelper; 16213481Sgiacomo.travaglini@arm.comclass WindowsDeathTest; 16313481Sgiacomo.travaglini@arm.comclass UnitTestImpl* GetUnitTestImpl(); 16413481Sgiacomo.travaglini@arm.comvoid ReportFailureInUnknownLocation(TestPartResult::Type result_type, 16513481Sgiacomo.travaglini@arm.com const std::string& message); 16613481Sgiacomo.travaglini@arm.com 16713481Sgiacomo.travaglini@arm.com} // namespace internal 16813481Sgiacomo.travaglini@arm.com 16913481Sgiacomo.travaglini@arm.com// The friend relationship of some of these classes is cyclic. 17013481Sgiacomo.travaglini@arm.com// If we don't forward declare them the compiler might confuse the classes 17113481Sgiacomo.travaglini@arm.com// in friendship clauses with same named classes on the scope. 17213481Sgiacomo.travaglini@arm.comclass Test; 17313481Sgiacomo.travaglini@arm.comclass TestCase; 17413481Sgiacomo.travaglini@arm.comclass TestInfo; 17513481Sgiacomo.travaglini@arm.comclass UnitTest; 17613481Sgiacomo.travaglini@arm.com 17713481Sgiacomo.travaglini@arm.com// A class for indicating whether an assertion was successful. When 17813481Sgiacomo.travaglini@arm.com// the assertion wasn't successful, the AssertionResult object 17913481Sgiacomo.travaglini@arm.com// remembers a non-empty message that describes how it failed. 18013481Sgiacomo.travaglini@arm.com// 18113481Sgiacomo.travaglini@arm.com// To create an instance of this class, use one of the factory functions 18213481Sgiacomo.travaglini@arm.com// (AssertionSuccess() and AssertionFailure()). 18313481Sgiacomo.travaglini@arm.com// 18413481Sgiacomo.travaglini@arm.com// This class is useful for two purposes: 18513481Sgiacomo.travaglini@arm.com// 1. Defining predicate functions to be used with Boolean test assertions 18613481Sgiacomo.travaglini@arm.com// EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts 18713481Sgiacomo.travaglini@arm.com// 2. Defining predicate-format functions to be 18813481Sgiacomo.travaglini@arm.com// used with predicate assertions (ASSERT_PRED_FORMAT*, etc). 18913481Sgiacomo.travaglini@arm.com// 19013481Sgiacomo.travaglini@arm.com// For example, if you define IsEven predicate: 19113481Sgiacomo.travaglini@arm.com// 19213481Sgiacomo.travaglini@arm.com// testing::AssertionResult IsEven(int n) { 19313481Sgiacomo.travaglini@arm.com// if ((n % 2) == 0) 19413481Sgiacomo.travaglini@arm.com// return testing::AssertionSuccess(); 19513481Sgiacomo.travaglini@arm.com// else 19613481Sgiacomo.travaglini@arm.com// return testing::AssertionFailure() << n << " is odd"; 19713481Sgiacomo.travaglini@arm.com// } 19813481Sgiacomo.travaglini@arm.com// 19913481Sgiacomo.travaglini@arm.com// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5))) 20013481Sgiacomo.travaglini@arm.com// will print the message 20113481Sgiacomo.travaglini@arm.com// 20213481Sgiacomo.travaglini@arm.com// Value of: IsEven(Fib(5)) 20313481Sgiacomo.travaglini@arm.com// Actual: false (5 is odd) 20413481Sgiacomo.travaglini@arm.com// Expected: true 20513481Sgiacomo.travaglini@arm.com// 20613481Sgiacomo.travaglini@arm.com// instead of a more opaque 20713481Sgiacomo.travaglini@arm.com// 20813481Sgiacomo.travaglini@arm.com// Value of: IsEven(Fib(5)) 20913481Sgiacomo.travaglini@arm.com// Actual: false 21013481Sgiacomo.travaglini@arm.com// Expected: true 21113481Sgiacomo.travaglini@arm.com// 21213481Sgiacomo.travaglini@arm.com// in case IsEven is a simple Boolean predicate. 21313481Sgiacomo.travaglini@arm.com// 21413481Sgiacomo.travaglini@arm.com// If you expect your predicate to be reused and want to support informative 21513481Sgiacomo.travaglini@arm.com// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up 21613481Sgiacomo.travaglini@arm.com// about half as often as positive ones in our tests), supply messages for 21713481Sgiacomo.travaglini@arm.com// both success and failure cases: 21813481Sgiacomo.travaglini@arm.com// 21913481Sgiacomo.travaglini@arm.com// testing::AssertionResult IsEven(int n) { 22013481Sgiacomo.travaglini@arm.com// if ((n % 2) == 0) 22113481Sgiacomo.travaglini@arm.com// return testing::AssertionSuccess() << n << " is even"; 22213481Sgiacomo.travaglini@arm.com// else 22313481Sgiacomo.travaglini@arm.com// return testing::AssertionFailure() << n << " is odd"; 22413481Sgiacomo.travaglini@arm.com// } 22513481Sgiacomo.travaglini@arm.com// 22613481Sgiacomo.travaglini@arm.com// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print 22713481Sgiacomo.travaglini@arm.com// 22813481Sgiacomo.travaglini@arm.com// Value of: IsEven(Fib(6)) 22913481Sgiacomo.travaglini@arm.com// Actual: true (8 is even) 23013481Sgiacomo.travaglini@arm.com// Expected: false 23113481Sgiacomo.travaglini@arm.com// 23213481Sgiacomo.travaglini@arm.com// NB: Predicates that support negative Boolean assertions have reduced 23313481Sgiacomo.travaglini@arm.com// performance in positive ones so be careful not to use them in tests 23413481Sgiacomo.travaglini@arm.com// that have lots (tens of thousands) of positive Boolean assertions. 23513481Sgiacomo.travaglini@arm.com// 23613481Sgiacomo.travaglini@arm.com// To use this class with EXPECT_PRED_FORMAT assertions such as: 23713481Sgiacomo.travaglini@arm.com// 23813481Sgiacomo.travaglini@arm.com// // Verifies that Foo() returns an even number. 23913481Sgiacomo.travaglini@arm.com// EXPECT_PRED_FORMAT1(IsEven, Foo()); 24013481Sgiacomo.travaglini@arm.com// 24113481Sgiacomo.travaglini@arm.com// you need to define: 24213481Sgiacomo.travaglini@arm.com// 24313481Sgiacomo.travaglini@arm.com// testing::AssertionResult IsEven(const char* expr, int n) { 24413481Sgiacomo.travaglini@arm.com// if ((n % 2) == 0) 24513481Sgiacomo.travaglini@arm.com// return testing::AssertionSuccess(); 24613481Sgiacomo.travaglini@arm.com// else 24713481Sgiacomo.travaglini@arm.com// return testing::AssertionFailure() 24813481Sgiacomo.travaglini@arm.com// << "Expected: " << expr << " is even\n Actual: it's " << n; 24913481Sgiacomo.travaglini@arm.com// } 25013481Sgiacomo.travaglini@arm.com// 25113481Sgiacomo.travaglini@arm.com// If Foo() returns 5, you will see the following message: 25213481Sgiacomo.travaglini@arm.com// 25313481Sgiacomo.travaglini@arm.com// Expected: Foo() is even 25413481Sgiacomo.travaglini@arm.com// Actual: it's 5 25513481Sgiacomo.travaglini@arm.com// 25613481Sgiacomo.travaglini@arm.comclass GTEST_API_ AssertionResult { 25713481Sgiacomo.travaglini@arm.com public: 25813481Sgiacomo.travaglini@arm.com // Copy constructor. 25913481Sgiacomo.travaglini@arm.com // Used in EXPECT_TRUE/FALSE(assertion_result). 26013481Sgiacomo.travaglini@arm.com AssertionResult(const AssertionResult& other); 26113481Sgiacomo.travaglini@arm.com 26213481Sgiacomo.travaglini@arm.com GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 /* forcing value to bool */) 26313481Sgiacomo.travaglini@arm.com 26413481Sgiacomo.travaglini@arm.com // Used in the EXPECT_TRUE/FALSE(bool_expression). 26513481Sgiacomo.travaglini@arm.com // 26613481Sgiacomo.travaglini@arm.com // T must be contextually convertible to bool. 26713481Sgiacomo.travaglini@arm.com // 26813481Sgiacomo.travaglini@arm.com // The second parameter prevents this overload from being considered if 26913481Sgiacomo.travaglini@arm.com // the argument is implicitly convertible to AssertionResult. In that case 27013481Sgiacomo.travaglini@arm.com // we want AssertionResult's copy constructor to be used. 27113481Sgiacomo.travaglini@arm.com template <typename T> 27213481Sgiacomo.travaglini@arm.com explicit AssertionResult( 27313481Sgiacomo.travaglini@arm.com const T& success, 27413481Sgiacomo.travaglini@arm.com typename internal::EnableIf< 27513481Sgiacomo.travaglini@arm.com !internal::ImplicitlyConvertible<T, AssertionResult>::value>::type* 27613481Sgiacomo.travaglini@arm.com /*enabler*/ = NULL) 27713481Sgiacomo.travaglini@arm.com : success_(success) {} 27813481Sgiacomo.travaglini@arm.com 27913481Sgiacomo.travaglini@arm.com GTEST_DISABLE_MSC_WARNINGS_POP_() 28013481Sgiacomo.travaglini@arm.com 28113481Sgiacomo.travaglini@arm.com // Assignment operator. 28213481Sgiacomo.travaglini@arm.com AssertionResult& operator=(AssertionResult other) { 28313481Sgiacomo.travaglini@arm.com swap(other); 28413481Sgiacomo.travaglini@arm.com return *this; 28513481Sgiacomo.travaglini@arm.com } 28613481Sgiacomo.travaglini@arm.com 28713481Sgiacomo.travaglini@arm.com // Returns true iff the assertion succeeded. 28813481Sgiacomo.travaglini@arm.com operator bool() const { return success_; } // NOLINT 28913481Sgiacomo.travaglini@arm.com 29013481Sgiacomo.travaglini@arm.com // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE. 29113481Sgiacomo.travaglini@arm.com AssertionResult operator!() const; 29213481Sgiacomo.travaglini@arm.com 29313481Sgiacomo.travaglini@arm.com // Returns the text streamed into this AssertionResult. Test assertions 29413481Sgiacomo.travaglini@arm.com // use it when they fail (i.e., the predicate's outcome doesn't match the 29513481Sgiacomo.travaglini@arm.com // assertion's expectation). When nothing has been streamed into the 29613481Sgiacomo.travaglini@arm.com // object, returns an empty string. 29713481Sgiacomo.travaglini@arm.com const char* message() const { 29813481Sgiacomo.travaglini@arm.com return message_.get() != NULL ? message_->c_str() : ""; 29913481Sgiacomo.travaglini@arm.com } 30013481Sgiacomo.travaglini@arm.com // TODO(vladl@google.com): Remove this after making sure no clients use it. 30113481Sgiacomo.travaglini@arm.com // Deprecated; please use message() instead. 30213481Sgiacomo.travaglini@arm.com const char* failure_message() const { return message(); } 30313481Sgiacomo.travaglini@arm.com 30413481Sgiacomo.travaglini@arm.com // Streams a custom failure message into this object. 30513481Sgiacomo.travaglini@arm.com template <typename T> AssertionResult& operator<<(const T& value) { 30613481Sgiacomo.travaglini@arm.com AppendMessage(Message() << value); 30713481Sgiacomo.travaglini@arm.com return *this; 30813481Sgiacomo.travaglini@arm.com } 30913481Sgiacomo.travaglini@arm.com 31013481Sgiacomo.travaglini@arm.com // Allows streaming basic output manipulators such as endl or flush into 31113481Sgiacomo.travaglini@arm.com // this object. 31213481Sgiacomo.travaglini@arm.com AssertionResult& operator<<( 31313481Sgiacomo.travaglini@arm.com ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) { 31413481Sgiacomo.travaglini@arm.com AppendMessage(Message() << basic_manipulator); 31513481Sgiacomo.travaglini@arm.com return *this; 31613481Sgiacomo.travaglini@arm.com } 31713481Sgiacomo.travaglini@arm.com 31813481Sgiacomo.travaglini@arm.com private: 31913481Sgiacomo.travaglini@arm.com // Appends the contents of message to message_. 32013481Sgiacomo.travaglini@arm.com void AppendMessage(const Message& a_message) { 32113481Sgiacomo.travaglini@arm.com if (message_.get() == NULL) 32213481Sgiacomo.travaglini@arm.com message_.reset(new ::std::string); 32313481Sgiacomo.travaglini@arm.com message_->append(a_message.GetString().c_str()); 32413481Sgiacomo.travaglini@arm.com } 32513481Sgiacomo.travaglini@arm.com 32613481Sgiacomo.travaglini@arm.com // Swap the contents of this AssertionResult with other. 32713481Sgiacomo.travaglini@arm.com void swap(AssertionResult& other); 32813481Sgiacomo.travaglini@arm.com 32913481Sgiacomo.travaglini@arm.com // Stores result of the assertion predicate. 33013481Sgiacomo.travaglini@arm.com bool success_; 33113481Sgiacomo.travaglini@arm.com // Stores the message describing the condition in case the expectation 33213481Sgiacomo.travaglini@arm.com // construct is not satisfied with the predicate's outcome. 33313481Sgiacomo.travaglini@arm.com // Referenced via a pointer to avoid taking too much stack frame space 33413481Sgiacomo.travaglini@arm.com // with test assertions. 33513481Sgiacomo.travaglini@arm.com internal::scoped_ptr< ::std::string> message_; 33613481Sgiacomo.travaglini@arm.com}; 33713481Sgiacomo.travaglini@arm.com 33813481Sgiacomo.travaglini@arm.com// Makes a successful assertion result. 33913481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult AssertionSuccess(); 34013481Sgiacomo.travaglini@arm.com 34113481Sgiacomo.travaglini@arm.com// Makes a failed assertion result. 34213481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult AssertionFailure(); 34313481Sgiacomo.travaglini@arm.com 34413481Sgiacomo.travaglini@arm.com// Makes a failed assertion result with the given failure message. 34513481Sgiacomo.travaglini@arm.com// Deprecated; use AssertionFailure() << msg. 34613481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult AssertionFailure(const Message& msg); 34713481Sgiacomo.travaglini@arm.com 34813481Sgiacomo.travaglini@arm.com// The abstract class that all tests inherit from. 34913481Sgiacomo.travaglini@arm.com// 35013481Sgiacomo.travaglini@arm.com// In Google Test, a unit test program contains one or many TestCases, and 35113481Sgiacomo.travaglini@arm.com// each TestCase contains one or many Tests. 35213481Sgiacomo.travaglini@arm.com// 35313481Sgiacomo.travaglini@arm.com// When you define a test using the TEST macro, you don't need to 35413481Sgiacomo.travaglini@arm.com// explicitly derive from Test - the TEST macro automatically does 35513481Sgiacomo.travaglini@arm.com// this for you. 35613481Sgiacomo.travaglini@arm.com// 35713481Sgiacomo.travaglini@arm.com// The only time you derive from Test is when defining a test fixture 35813481Sgiacomo.travaglini@arm.com// to be used a TEST_F. For example: 35913481Sgiacomo.travaglini@arm.com// 36013481Sgiacomo.travaglini@arm.com// class FooTest : public testing::Test { 36113481Sgiacomo.travaglini@arm.com// protected: 36213481Sgiacomo.travaglini@arm.com// void SetUp() override { ... } 36313481Sgiacomo.travaglini@arm.com// void TearDown() override { ... } 36413481Sgiacomo.travaglini@arm.com// ... 36513481Sgiacomo.travaglini@arm.com// }; 36613481Sgiacomo.travaglini@arm.com// 36713481Sgiacomo.travaglini@arm.com// TEST_F(FooTest, Bar) { ... } 36813481Sgiacomo.travaglini@arm.com// TEST_F(FooTest, Baz) { ... } 36913481Sgiacomo.travaglini@arm.com// 37013481Sgiacomo.travaglini@arm.com// Test is not copyable. 37113481Sgiacomo.travaglini@arm.comclass GTEST_API_ Test { 37213481Sgiacomo.travaglini@arm.com public: 37313481Sgiacomo.travaglini@arm.com friend class TestInfo; 37413481Sgiacomo.travaglini@arm.com 37513481Sgiacomo.travaglini@arm.com // Defines types for pointers to functions that set up and tear down 37613481Sgiacomo.travaglini@arm.com // a test case. 37713481Sgiacomo.travaglini@arm.com typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc; 37813481Sgiacomo.travaglini@arm.com typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc; 37913481Sgiacomo.travaglini@arm.com 38013481Sgiacomo.travaglini@arm.com // The d'tor is virtual as we intend to inherit from Test. 38113481Sgiacomo.travaglini@arm.com virtual ~Test(); 38213481Sgiacomo.travaglini@arm.com 38313481Sgiacomo.travaglini@arm.com // Sets up the stuff shared by all tests in this test case. 38413481Sgiacomo.travaglini@arm.com // 38513481Sgiacomo.travaglini@arm.com // Google Test will call Foo::SetUpTestCase() before running the first 38613481Sgiacomo.travaglini@arm.com // test in test case Foo. Hence a sub-class can define its own 38713481Sgiacomo.travaglini@arm.com // SetUpTestCase() method to shadow the one defined in the super 38813481Sgiacomo.travaglini@arm.com // class. 38913481Sgiacomo.travaglini@arm.com static void SetUpTestCase() {} 39013481Sgiacomo.travaglini@arm.com 39113481Sgiacomo.travaglini@arm.com // Tears down the stuff shared by all tests in this test case. 39213481Sgiacomo.travaglini@arm.com // 39313481Sgiacomo.travaglini@arm.com // Google Test will call Foo::TearDownTestCase() after running the last 39413481Sgiacomo.travaglini@arm.com // test in test case Foo. Hence a sub-class can define its own 39513481Sgiacomo.travaglini@arm.com // TearDownTestCase() method to shadow the one defined in the super 39613481Sgiacomo.travaglini@arm.com // class. 39713481Sgiacomo.travaglini@arm.com static void TearDownTestCase() {} 39813481Sgiacomo.travaglini@arm.com 39913481Sgiacomo.travaglini@arm.com // Returns true iff the current test has a fatal failure. 40013481Sgiacomo.travaglini@arm.com static bool HasFatalFailure(); 40113481Sgiacomo.travaglini@arm.com 40213481Sgiacomo.travaglini@arm.com // Returns true iff the current test has a non-fatal failure. 40313481Sgiacomo.travaglini@arm.com static bool HasNonfatalFailure(); 40413481Sgiacomo.travaglini@arm.com 40513481Sgiacomo.travaglini@arm.com // Returns true iff the current test has a (either fatal or 40613481Sgiacomo.travaglini@arm.com // non-fatal) failure. 40713481Sgiacomo.travaglini@arm.com static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); } 40813481Sgiacomo.travaglini@arm.com 40913481Sgiacomo.travaglini@arm.com // Logs a property for the current test, test case, or for the entire 41013481Sgiacomo.travaglini@arm.com // invocation of the test program when used outside of the context of a 41113481Sgiacomo.travaglini@arm.com // test case. Only the last value for a given key is remembered. These 41213481Sgiacomo.travaglini@arm.com // are public static so they can be called from utility functions that are 41313481Sgiacomo.travaglini@arm.com // not members of the test fixture. Calls to RecordProperty made during 41413481Sgiacomo.travaglini@arm.com // lifespan of the test (from the moment its constructor starts to the 41513481Sgiacomo.travaglini@arm.com // moment its destructor finishes) will be output in XML as attributes of 41613481Sgiacomo.travaglini@arm.com // the <testcase> element. Properties recorded from fixture's 41713481Sgiacomo.travaglini@arm.com // SetUpTestCase or TearDownTestCase are logged as attributes of the 41813481Sgiacomo.travaglini@arm.com // corresponding <testsuite> element. Calls to RecordProperty made in the 41913481Sgiacomo.travaglini@arm.com // global context (before or after invocation of RUN_ALL_TESTS and from 42013481Sgiacomo.travaglini@arm.com // SetUp/TearDown method of Environment objects registered with Google 42113481Sgiacomo.travaglini@arm.com // Test) will be output as attributes of the <testsuites> element. 42213481Sgiacomo.travaglini@arm.com static void RecordProperty(const std::string& key, const std::string& value); 42313481Sgiacomo.travaglini@arm.com static void RecordProperty(const std::string& key, int value); 42413481Sgiacomo.travaglini@arm.com 42513481Sgiacomo.travaglini@arm.com protected: 42613481Sgiacomo.travaglini@arm.com // Creates a Test object. 42713481Sgiacomo.travaglini@arm.com Test(); 42813481Sgiacomo.travaglini@arm.com 42913481Sgiacomo.travaglini@arm.com // Sets up the test fixture. 43013481Sgiacomo.travaglini@arm.com virtual void SetUp(); 43113481Sgiacomo.travaglini@arm.com 43213481Sgiacomo.travaglini@arm.com // Tears down the test fixture. 43313481Sgiacomo.travaglini@arm.com virtual void TearDown(); 43413481Sgiacomo.travaglini@arm.com 43513481Sgiacomo.travaglini@arm.com private: 43613481Sgiacomo.travaglini@arm.com // Returns true iff the current test has the same fixture class as 43713481Sgiacomo.travaglini@arm.com // the first test in the current test case. 43813481Sgiacomo.travaglini@arm.com static bool HasSameFixtureClass(); 43913481Sgiacomo.travaglini@arm.com 44013481Sgiacomo.travaglini@arm.com // Runs the test after the test fixture has been set up. 44113481Sgiacomo.travaglini@arm.com // 44213481Sgiacomo.travaglini@arm.com // A sub-class must implement this to define the test logic. 44313481Sgiacomo.travaglini@arm.com // 44413481Sgiacomo.travaglini@arm.com // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM. 44513481Sgiacomo.travaglini@arm.com // Instead, use the TEST or TEST_F macro. 44613481Sgiacomo.travaglini@arm.com virtual void TestBody() = 0; 44713481Sgiacomo.travaglini@arm.com 44813481Sgiacomo.travaglini@arm.com // Sets up, executes, and tears down the test. 44913481Sgiacomo.travaglini@arm.com void Run(); 45013481Sgiacomo.travaglini@arm.com 45113481Sgiacomo.travaglini@arm.com // Deletes self. We deliberately pick an unusual name for this 45213481Sgiacomo.travaglini@arm.com // internal method to avoid clashing with names used in user TESTs. 45313481Sgiacomo.travaglini@arm.com void DeleteSelf_() { delete this; } 45413481Sgiacomo.travaglini@arm.com 45513481Sgiacomo.travaglini@arm.com const internal::scoped_ptr< GTEST_FLAG_SAVER_ > gtest_flag_saver_; 45613481Sgiacomo.travaglini@arm.com 45713481Sgiacomo.travaglini@arm.com // Often a user misspells SetUp() as Setup() and spends a long time 45813481Sgiacomo.travaglini@arm.com // wondering why it is never called by Google Test. The declaration of 45913481Sgiacomo.travaglini@arm.com // the following method is solely for catching such an error at 46013481Sgiacomo.travaglini@arm.com // compile time: 46113481Sgiacomo.travaglini@arm.com // 46213481Sgiacomo.travaglini@arm.com // - The return type is deliberately chosen to be not void, so it 46313481Sgiacomo.travaglini@arm.com // will be a conflict if void Setup() is declared in the user's 46413481Sgiacomo.travaglini@arm.com // test fixture. 46513481Sgiacomo.travaglini@arm.com // 46613481Sgiacomo.travaglini@arm.com // - This method is private, so it will be another compiler error 46713481Sgiacomo.travaglini@arm.com // if the method is called from the user's test fixture. 46813481Sgiacomo.travaglini@arm.com // 46913481Sgiacomo.travaglini@arm.com // DO NOT OVERRIDE THIS FUNCTION. 47013481Sgiacomo.travaglini@arm.com // 47113481Sgiacomo.travaglini@arm.com // If you see an error about overriding the following function or 47213481Sgiacomo.travaglini@arm.com // about it being private, you have mis-spelled SetUp() as Setup(). 47313481Sgiacomo.travaglini@arm.com struct Setup_should_be_spelled_SetUp {}; 47413481Sgiacomo.travaglini@arm.com virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } 47513481Sgiacomo.travaglini@arm.com 47613481Sgiacomo.travaglini@arm.com // We disallow copying Tests. 47713481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(Test); 47813481Sgiacomo.travaglini@arm.com}; 47913481Sgiacomo.travaglini@arm.com 48013481Sgiacomo.travaglini@arm.comtypedef internal::TimeInMillis TimeInMillis; 48113481Sgiacomo.travaglini@arm.com 48213481Sgiacomo.travaglini@arm.com// A copyable object representing a user specified test property which can be 48313481Sgiacomo.travaglini@arm.com// output as a key/value string pair. 48413481Sgiacomo.travaglini@arm.com// 48513481Sgiacomo.travaglini@arm.com// Don't inherit from TestProperty as its destructor is not virtual. 48613481Sgiacomo.travaglini@arm.comclass TestProperty { 48713481Sgiacomo.travaglini@arm.com public: 48813481Sgiacomo.travaglini@arm.com // C'tor. TestProperty does NOT have a default constructor. 48913481Sgiacomo.travaglini@arm.com // Always use this constructor (with parameters) to create a 49013481Sgiacomo.travaglini@arm.com // TestProperty object. 49113481Sgiacomo.travaglini@arm.com TestProperty(const std::string& a_key, const std::string& a_value) : 49213481Sgiacomo.travaglini@arm.com key_(a_key), value_(a_value) { 49313481Sgiacomo.travaglini@arm.com } 49413481Sgiacomo.travaglini@arm.com 49513481Sgiacomo.travaglini@arm.com // Gets the user supplied key. 49613481Sgiacomo.travaglini@arm.com const char* key() const { 49713481Sgiacomo.travaglini@arm.com return key_.c_str(); 49813481Sgiacomo.travaglini@arm.com } 49913481Sgiacomo.travaglini@arm.com 50013481Sgiacomo.travaglini@arm.com // Gets the user supplied value. 50113481Sgiacomo.travaglini@arm.com const char* value() const { 50213481Sgiacomo.travaglini@arm.com return value_.c_str(); 50313481Sgiacomo.travaglini@arm.com } 50413481Sgiacomo.travaglini@arm.com 50513481Sgiacomo.travaglini@arm.com // Sets a new value, overriding the one supplied in the constructor. 50613481Sgiacomo.travaglini@arm.com void SetValue(const std::string& new_value) { 50713481Sgiacomo.travaglini@arm.com value_ = new_value; 50813481Sgiacomo.travaglini@arm.com } 50913481Sgiacomo.travaglini@arm.com 51013481Sgiacomo.travaglini@arm.com private: 51113481Sgiacomo.travaglini@arm.com // The key supplied by the user. 51213481Sgiacomo.travaglini@arm.com std::string key_; 51313481Sgiacomo.travaglini@arm.com // The value supplied by the user. 51413481Sgiacomo.travaglini@arm.com std::string value_; 51513481Sgiacomo.travaglini@arm.com}; 51613481Sgiacomo.travaglini@arm.com 51713481Sgiacomo.travaglini@arm.com// The result of a single Test. This includes a list of 51813481Sgiacomo.travaglini@arm.com// TestPartResults, a list of TestProperties, a count of how many 51913481Sgiacomo.travaglini@arm.com// death tests there are in the Test, and how much time it took to run 52013481Sgiacomo.travaglini@arm.com// the Test. 52113481Sgiacomo.travaglini@arm.com// 52213481Sgiacomo.travaglini@arm.com// TestResult is not copyable. 52313481Sgiacomo.travaglini@arm.comclass GTEST_API_ TestResult { 52413481Sgiacomo.travaglini@arm.com public: 52513481Sgiacomo.travaglini@arm.com // Creates an empty TestResult. 52613481Sgiacomo.travaglini@arm.com TestResult(); 52713481Sgiacomo.travaglini@arm.com 52813481Sgiacomo.travaglini@arm.com // D'tor. Do not inherit from TestResult. 52913481Sgiacomo.travaglini@arm.com ~TestResult(); 53013481Sgiacomo.travaglini@arm.com 53113481Sgiacomo.travaglini@arm.com // Gets the number of all test parts. This is the sum of the number 53213481Sgiacomo.travaglini@arm.com // of successful test parts and the number of failed test parts. 53313481Sgiacomo.travaglini@arm.com int total_part_count() const; 53413481Sgiacomo.travaglini@arm.com 53513481Sgiacomo.travaglini@arm.com // Returns the number of the test properties. 53613481Sgiacomo.travaglini@arm.com int test_property_count() const; 53713481Sgiacomo.travaglini@arm.com 53813481Sgiacomo.travaglini@arm.com // Returns true iff the test passed (i.e. no test part failed). 53913481Sgiacomo.travaglini@arm.com bool Passed() const { return !Failed(); } 54013481Sgiacomo.travaglini@arm.com 54113481Sgiacomo.travaglini@arm.com // Returns true iff the test failed. 54213481Sgiacomo.travaglini@arm.com bool Failed() const; 54313481Sgiacomo.travaglini@arm.com 54413481Sgiacomo.travaglini@arm.com // Returns true iff the test fatally failed. 54513481Sgiacomo.travaglini@arm.com bool HasFatalFailure() const; 54613481Sgiacomo.travaglini@arm.com 54713481Sgiacomo.travaglini@arm.com // Returns true iff the test has a non-fatal failure. 54813481Sgiacomo.travaglini@arm.com bool HasNonfatalFailure() const; 54913481Sgiacomo.travaglini@arm.com 55013481Sgiacomo.travaglini@arm.com // Returns the elapsed time, in milliseconds. 55113481Sgiacomo.travaglini@arm.com TimeInMillis elapsed_time() const { return elapsed_time_; } 55213481Sgiacomo.travaglini@arm.com 55313481Sgiacomo.travaglini@arm.com // Returns the i-th test part result among all the results. i can range 55413481Sgiacomo.travaglini@arm.com // from 0 to test_property_count() - 1. If i is not in that range, aborts 55513481Sgiacomo.travaglini@arm.com // the program. 55613481Sgiacomo.travaglini@arm.com const TestPartResult& GetTestPartResult(int i) const; 55713481Sgiacomo.travaglini@arm.com 55813481Sgiacomo.travaglini@arm.com // Returns the i-th test property. i can range from 0 to 55913481Sgiacomo.travaglini@arm.com // test_property_count() - 1. If i is not in that range, aborts the 56013481Sgiacomo.travaglini@arm.com // program. 56113481Sgiacomo.travaglini@arm.com const TestProperty& GetTestProperty(int i) const; 56213481Sgiacomo.travaglini@arm.com 56313481Sgiacomo.travaglini@arm.com private: 56413481Sgiacomo.travaglini@arm.com friend class TestInfo; 56513481Sgiacomo.travaglini@arm.com friend class TestCase; 56613481Sgiacomo.travaglini@arm.com friend class UnitTest; 56713481Sgiacomo.travaglini@arm.com friend class internal::DefaultGlobalTestPartResultReporter; 56813481Sgiacomo.travaglini@arm.com friend class internal::ExecDeathTest; 56913481Sgiacomo.travaglini@arm.com friend class internal::TestResultAccessor; 57013481Sgiacomo.travaglini@arm.com friend class internal::UnitTestImpl; 57113481Sgiacomo.travaglini@arm.com friend class internal::WindowsDeathTest; 57213481Sgiacomo.travaglini@arm.com 57313481Sgiacomo.travaglini@arm.com // Gets the vector of TestPartResults. 57413481Sgiacomo.travaglini@arm.com const std::vector<TestPartResult>& test_part_results() const { 57513481Sgiacomo.travaglini@arm.com return test_part_results_; 57613481Sgiacomo.travaglini@arm.com } 57713481Sgiacomo.travaglini@arm.com 57813481Sgiacomo.travaglini@arm.com // Gets the vector of TestProperties. 57913481Sgiacomo.travaglini@arm.com const std::vector<TestProperty>& test_properties() const { 58013481Sgiacomo.travaglini@arm.com return test_properties_; 58113481Sgiacomo.travaglini@arm.com } 58213481Sgiacomo.travaglini@arm.com 58313481Sgiacomo.travaglini@arm.com // Sets the elapsed time. 58413481Sgiacomo.travaglini@arm.com void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; } 58513481Sgiacomo.travaglini@arm.com 58613481Sgiacomo.travaglini@arm.com // Adds a test property to the list. The property is validated and may add 58713481Sgiacomo.travaglini@arm.com // a non-fatal failure if invalid (e.g., if it conflicts with reserved 58813481Sgiacomo.travaglini@arm.com // key names). If a property is already recorded for the same key, the 58913481Sgiacomo.travaglini@arm.com // value will be updated, rather than storing multiple values for the same 59013481Sgiacomo.travaglini@arm.com // key. xml_element specifies the element for which the property is being 59113481Sgiacomo.travaglini@arm.com // recorded and is used for validation. 59213481Sgiacomo.travaglini@arm.com void RecordProperty(const std::string& xml_element, 59313481Sgiacomo.travaglini@arm.com const TestProperty& test_property); 59413481Sgiacomo.travaglini@arm.com 59513481Sgiacomo.travaglini@arm.com // Adds a failure if the key is a reserved attribute of Google Test 59613481Sgiacomo.travaglini@arm.com // testcase tags. Returns true if the property is valid. 59713481Sgiacomo.travaglini@arm.com // TODO(russr): Validate attribute names are legal and human readable. 59813481Sgiacomo.travaglini@arm.com static bool ValidateTestProperty(const std::string& xml_element, 59913481Sgiacomo.travaglini@arm.com const TestProperty& test_property); 60013481Sgiacomo.travaglini@arm.com 60113481Sgiacomo.travaglini@arm.com // Adds a test part result to the list. 60213481Sgiacomo.travaglini@arm.com void AddTestPartResult(const TestPartResult& test_part_result); 60313481Sgiacomo.travaglini@arm.com 60413481Sgiacomo.travaglini@arm.com // Returns the death test count. 60513481Sgiacomo.travaglini@arm.com int death_test_count() const { return death_test_count_; } 60613481Sgiacomo.travaglini@arm.com 60713481Sgiacomo.travaglini@arm.com // Increments the death test count, returning the new count. 60813481Sgiacomo.travaglini@arm.com int increment_death_test_count() { return ++death_test_count_; } 60913481Sgiacomo.travaglini@arm.com 61013481Sgiacomo.travaglini@arm.com // Clears the test part results. 61113481Sgiacomo.travaglini@arm.com void ClearTestPartResults(); 61213481Sgiacomo.travaglini@arm.com 61313481Sgiacomo.travaglini@arm.com // Clears the object. 61413481Sgiacomo.travaglini@arm.com void Clear(); 61513481Sgiacomo.travaglini@arm.com 61613481Sgiacomo.travaglini@arm.com // Protects mutable state of the property vector and of owned 61713481Sgiacomo.travaglini@arm.com // properties, whose values may be updated. 61813481Sgiacomo.travaglini@arm.com internal::Mutex test_properites_mutex_; 61913481Sgiacomo.travaglini@arm.com 62013481Sgiacomo.travaglini@arm.com // The vector of TestPartResults 62113481Sgiacomo.travaglini@arm.com std::vector<TestPartResult> test_part_results_; 62213481Sgiacomo.travaglini@arm.com // The vector of TestProperties 62313481Sgiacomo.travaglini@arm.com std::vector<TestProperty> test_properties_; 62413481Sgiacomo.travaglini@arm.com // Running count of death tests. 62513481Sgiacomo.travaglini@arm.com int death_test_count_; 62613481Sgiacomo.travaglini@arm.com // The elapsed time, in milliseconds. 62713481Sgiacomo.travaglini@arm.com TimeInMillis elapsed_time_; 62813481Sgiacomo.travaglini@arm.com 62913481Sgiacomo.travaglini@arm.com // We disallow copying TestResult. 63013481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult); 63113481Sgiacomo.travaglini@arm.com}; // class TestResult 63213481Sgiacomo.travaglini@arm.com 63313481Sgiacomo.travaglini@arm.com// A TestInfo object stores the following information about a test: 63413481Sgiacomo.travaglini@arm.com// 63513481Sgiacomo.travaglini@arm.com// Test case name 63613481Sgiacomo.travaglini@arm.com// Test name 63713481Sgiacomo.travaglini@arm.com// Whether the test should be run 63813481Sgiacomo.travaglini@arm.com// A function pointer that creates the test object when invoked 63913481Sgiacomo.travaglini@arm.com// Test result 64013481Sgiacomo.travaglini@arm.com// 64113481Sgiacomo.travaglini@arm.com// The constructor of TestInfo registers itself with the UnitTest 64213481Sgiacomo.travaglini@arm.com// singleton such that the RUN_ALL_TESTS() macro knows which tests to 64313481Sgiacomo.travaglini@arm.com// run. 64413481Sgiacomo.travaglini@arm.comclass GTEST_API_ TestInfo { 64513481Sgiacomo.travaglini@arm.com public: 64613481Sgiacomo.travaglini@arm.com // Destructs a TestInfo object. This function is not virtual, so 64713481Sgiacomo.travaglini@arm.com // don't inherit from TestInfo. 64813481Sgiacomo.travaglini@arm.com ~TestInfo(); 64913481Sgiacomo.travaglini@arm.com 65013481Sgiacomo.travaglini@arm.com // Returns the test case name. 65113481Sgiacomo.travaglini@arm.com const char* test_case_name() const { return test_case_name_.c_str(); } 65213481Sgiacomo.travaglini@arm.com 65313481Sgiacomo.travaglini@arm.com // Returns the test name. 65413481Sgiacomo.travaglini@arm.com const char* name() const { return name_.c_str(); } 65513481Sgiacomo.travaglini@arm.com 65613481Sgiacomo.travaglini@arm.com // Returns the name of the parameter type, or NULL if this is not a typed 65713481Sgiacomo.travaglini@arm.com // or a type-parameterized test. 65813481Sgiacomo.travaglini@arm.com const char* type_param() const { 65913481Sgiacomo.travaglini@arm.com if (type_param_.get() != NULL) 66013481Sgiacomo.travaglini@arm.com return type_param_->c_str(); 66113481Sgiacomo.travaglini@arm.com return NULL; 66213481Sgiacomo.travaglini@arm.com } 66313481Sgiacomo.travaglini@arm.com 66413481Sgiacomo.travaglini@arm.com // Returns the text representation of the value parameter, or NULL if this 66513481Sgiacomo.travaglini@arm.com // is not a value-parameterized test. 66613481Sgiacomo.travaglini@arm.com const char* value_param() const { 66713481Sgiacomo.travaglini@arm.com if (value_param_.get() != NULL) 66813481Sgiacomo.travaglini@arm.com return value_param_->c_str(); 66913481Sgiacomo.travaglini@arm.com return NULL; 67013481Sgiacomo.travaglini@arm.com } 67113481Sgiacomo.travaglini@arm.com 67213481Sgiacomo.travaglini@arm.com // Returns the file name where this test is defined. 67313481Sgiacomo.travaglini@arm.com const char* file() const { return location_.file.c_str(); } 67413481Sgiacomo.travaglini@arm.com 67513481Sgiacomo.travaglini@arm.com // Returns the line where this test is defined. 67613481Sgiacomo.travaglini@arm.com int line() const { return location_.line; } 67713481Sgiacomo.travaglini@arm.com 67813481Sgiacomo.travaglini@arm.com // Returns true if this test should run, that is if the test is not 67913481Sgiacomo.travaglini@arm.com // disabled (or it is disabled but the also_run_disabled_tests flag has 68013481Sgiacomo.travaglini@arm.com // been specified) and its full name matches the user-specified filter. 68113481Sgiacomo.travaglini@arm.com // 68213481Sgiacomo.travaglini@arm.com // Google Test allows the user to filter the tests by their full names. 68313481Sgiacomo.travaglini@arm.com // The full name of a test Bar in test case Foo is defined as 68413481Sgiacomo.travaglini@arm.com // "Foo.Bar". Only the tests that match the filter will run. 68513481Sgiacomo.travaglini@arm.com // 68613481Sgiacomo.travaglini@arm.com // A filter is a colon-separated list of glob (not regex) patterns, 68713481Sgiacomo.travaglini@arm.com // optionally followed by a '-' and a colon-separated list of 68813481Sgiacomo.travaglini@arm.com // negative patterns (tests to exclude). A test is run if it 68913481Sgiacomo.travaglini@arm.com // matches one of the positive patterns and does not match any of 69013481Sgiacomo.travaglini@arm.com // the negative patterns. 69113481Sgiacomo.travaglini@arm.com // 69213481Sgiacomo.travaglini@arm.com // For example, *A*:Foo.* is a filter that matches any string that 69313481Sgiacomo.travaglini@arm.com // contains the character 'A' or starts with "Foo.". 69413481Sgiacomo.travaglini@arm.com bool should_run() const { return should_run_; } 69513481Sgiacomo.travaglini@arm.com 69613481Sgiacomo.travaglini@arm.com // Returns true iff this test will appear in the XML report. 69713481Sgiacomo.travaglini@arm.com bool is_reportable() const { 69813481Sgiacomo.travaglini@arm.com // For now, the XML report includes all tests matching the filter. 69913481Sgiacomo.travaglini@arm.com // In the future, we may trim tests that are excluded because of 70013481Sgiacomo.travaglini@arm.com // sharding. 70113481Sgiacomo.travaglini@arm.com return matches_filter_; 70213481Sgiacomo.travaglini@arm.com } 70313481Sgiacomo.travaglini@arm.com 70413481Sgiacomo.travaglini@arm.com // Returns the result of the test. 70513481Sgiacomo.travaglini@arm.com const TestResult* result() const { return &result_; } 70613481Sgiacomo.travaglini@arm.com 70713481Sgiacomo.travaglini@arm.com private: 70813481Sgiacomo.travaglini@arm.com#if GTEST_HAS_DEATH_TEST 70913481Sgiacomo.travaglini@arm.com friend class internal::DefaultDeathTestFactory; 71013481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_DEATH_TEST 71113481Sgiacomo.travaglini@arm.com friend class Test; 71213481Sgiacomo.travaglini@arm.com friend class TestCase; 71313481Sgiacomo.travaglini@arm.com friend class internal::UnitTestImpl; 71413481Sgiacomo.travaglini@arm.com friend class internal::StreamingListenerTest; 71513481Sgiacomo.travaglini@arm.com friend TestInfo* internal::MakeAndRegisterTestInfo( 71613481Sgiacomo.travaglini@arm.com const char* test_case_name, 71713481Sgiacomo.travaglini@arm.com const char* name, 71813481Sgiacomo.travaglini@arm.com const char* type_param, 71913481Sgiacomo.travaglini@arm.com const char* value_param, 72013481Sgiacomo.travaglini@arm.com internal::CodeLocation code_location, 72113481Sgiacomo.travaglini@arm.com internal::TypeId fixture_class_id, 72213481Sgiacomo.travaglini@arm.com Test::SetUpTestCaseFunc set_up_tc, 72313481Sgiacomo.travaglini@arm.com Test::TearDownTestCaseFunc tear_down_tc, 72413481Sgiacomo.travaglini@arm.com internal::TestFactoryBase* factory); 72513481Sgiacomo.travaglini@arm.com 72613481Sgiacomo.travaglini@arm.com // Constructs a TestInfo object. The newly constructed instance assumes 72713481Sgiacomo.travaglini@arm.com // ownership of the factory object. 72813481Sgiacomo.travaglini@arm.com TestInfo(const std::string& test_case_name, 72913481Sgiacomo.travaglini@arm.com const std::string& name, 73013481Sgiacomo.travaglini@arm.com const char* a_type_param, // NULL if not a type-parameterized test 73113481Sgiacomo.travaglini@arm.com const char* a_value_param, // NULL if not a value-parameterized test 73213481Sgiacomo.travaglini@arm.com internal::CodeLocation a_code_location, 73313481Sgiacomo.travaglini@arm.com internal::TypeId fixture_class_id, 73413481Sgiacomo.travaglini@arm.com internal::TestFactoryBase* factory); 73513481Sgiacomo.travaglini@arm.com 73613481Sgiacomo.travaglini@arm.com // Increments the number of death tests encountered in this test so 73713481Sgiacomo.travaglini@arm.com // far. 73813481Sgiacomo.travaglini@arm.com int increment_death_test_count() { 73913481Sgiacomo.travaglini@arm.com return result_.increment_death_test_count(); 74013481Sgiacomo.travaglini@arm.com } 74113481Sgiacomo.travaglini@arm.com 74213481Sgiacomo.travaglini@arm.com // Creates the test object, runs it, records its result, and then 74313481Sgiacomo.travaglini@arm.com // deletes it. 74413481Sgiacomo.travaglini@arm.com void Run(); 74513481Sgiacomo.travaglini@arm.com 74613481Sgiacomo.travaglini@arm.com static void ClearTestResult(TestInfo* test_info) { 74713481Sgiacomo.travaglini@arm.com test_info->result_.Clear(); 74813481Sgiacomo.travaglini@arm.com } 74913481Sgiacomo.travaglini@arm.com 75013481Sgiacomo.travaglini@arm.com // These fields are immutable properties of the test. 75113481Sgiacomo.travaglini@arm.com const std::string test_case_name_; // Test case name 75213481Sgiacomo.travaglini@arm.com const std::string name_; // Test name 75313481Sgiacomo.travaglini@arm.com // Name of the parameter type, or NULL if this is not a typed or a 75413481Sgiacomo.travaglini@arm.com // type-parameterized test. 75513481Sgiacomo.travaglini@arm.com const internal::scoped_ptr<const ::std::string> type_param_; 75613481Sgiacomo.travaglini@arm.com // Text representation of the value parameter, or NULL if this is not a 75713481Sgiacomo.travaglini@arm.com // value-parameterized test. 75813481Sgiacomo.travaglini@arm.com const internal::scoped_ptr<const ::std::string> value_param_; 75913481Sgiacomo.travaglini@arm.com internal::CodeLocation location_; 76013481Sgiacomo.travaglini@arm.com const internal::TypeId fixture_class_id_; // ID of the test fixture class 76113481Sgiacomo.travaglini@arm.com bool should_run_; // True iff this test should run 76213481Sgiacomo.travaglini@arm.com bool is_disabled_; // True iff this test is disabled 76313481Sgiacomo.travaglini@arm.com bool matches_filter_; // True if this test matches the 76413481Sgiacomo.travaglini@arm.com // user-specified filter. 76513481Sgiacomo.travaglini@arm.com internal::TestFactoryBase* const factory_; // The factory that creates 76613481Sgiacomo.travaglini@arm.com // the test object 76713481Sgiacomo.travaglini@arm.com 76813481Sgiacomo.travaglini@arm.com // This field is mutable and needs to be reset before running the 76913481Sgiacomo.travaglini@arm.com // test for the second time. 77013481Sgiacomo.travaglini@arm.com TestResult result_; 77113481Sgiacomo.travaglini@arm.com 77213481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo); 77313481Sgiacomo.travaglini@arm.com}; 77413481Sgiacomo.travaglini@arm.com 77513481Sgiacomo.travaglini@arm.com// A test case, which consists of a vector of TestInfos. 77613481Sgiacomo.travaglini@arm.com// 77713481Sgiacomo.travaglini@arm.com// TestCase is not copyable. 77813481Sgiacomo.travaglini@arm.comclass GTEST_API_ TestCase { 77913481Sgiacomo.travaglini@arm.com public: 78013481Sgiacomo.travaglini@arm.com // Creates a TestCase with the given name. 78113481Sgiacomo.travaglini@arm.com // 78213481Sgiacomo.travaglini@arm.com // TestCase does NOT have a default constructor. Always use this 78313481Sgiacomo.travaglini@arm.com // constructor to create a TestCase object. 78413481Sgiacomo.travaglini@arm.com // 78513481Sgiacomo.travaglini@arm.com // Arguments: 78613481Sgiacomo.travaglini@arm.com // 78713481Sgiacomo.travaglini@arm.com // name: name of the test case 78813481Sgiacomo.travaglini@arm.com // a_type_param: the name of the test's type parameter, or NULL if 78913481Sgiacomo.travaglini@arm.com // this is not a type-parameterized test. 79013481Sgiacomo.travaglini@arm.com // set_up_tc: pointer to the function that sets up the test case 79113481Sgiacomo.travaglini@arm.com // tear_down_tc: pointer to the function that tears down the test case 79213481Sgiacomo.travaglini@arm.com TestCase(const char* name, const char* a_type_param, 79313481Sgiacomo.travaglini@arm.com Test::SetUpTestCaseFunc set_up_tc, 79413481Sgiacomo.travaglini@arm.com Test::TearDownTestCaseFunc tear_down_tc); 79513481Sgiacomo.travaglini@arm.com 79613481Sgiacomo.travaglini@arm.com // Destructor of TestCase. 79713481Sgiacomo.travaglini@arm.com virtual ~TestCase(); 79813481Sgiacomo.travaglini@arm.com 79913481Sgiacomo.travaglini@arm.com // Gets the name of the TestCase. 80013481Sgiacomo.travaglini@arm.com const char* name() const { return name_.c_str(); } 80113481Sgiacomo.travaglini@arm.com 80213481Sgiacomo.travaglini@arm.com // Returns the name of the parameter type, or NULL if this is not a 80313481Sgiacomo.travaglini@arm.com // type-parameterized test case. 80413481Sgiacomo.travaglini@arm.com const char* type_param() const { 80513481Sgiacomo.travaglini@arm.com if (type_param_.get() != NULL) 80613481Sgiacomo.travaglini@arm.com return type_param_->c_str(); 80713481Sgiacomo.travaglini@arm.com return NULL; 80813481Sgiacomo.travaglini@arm.com } 80913481Sgiacomo.travaglini@arm.com 81013481Sgiacomo.travaglini@arm.com // Returns true if any test in this test case should run. 81113481Sgiacomo.travaglini@arm.com bool should_run() const { return should_run_; } 81213481Sgiacomo.travaglini@arm.com 81313481Sgiacomo.travaglini@arm.com // Gets the number of successful tests in this test case. 81413481Sgiacomo.travaglini@arm.com int successful_test_count() const; 81513481Sgiacomo.travaglini@arm.com 81613481Sgiacomo.travaglini@arm.com // Gets the number of failed tests in this test case. 81713481Sgiacomo.travaglini@arm.com int failed_test_count() const; 81813481Sgiacomo.travaglini@arm.com 81913481Sgiacomo.travaglini@arm.com // Gets the number of disabled tests that will be reported in the XML report. 82013481Sgiacomo.travaglini@arm.com int reportable_disabled_test_count() const; 82113481Sgiacomo.travaglini@arm.com 82213481Sgiacomo.travaglini@arm.com // Gets the number of disabled tests in this test case. 82313481Sgiacomo.travaglini@arm.com int disabled_test_count() const; 82413481Sgiacomo.travaglini@arm.com 82513481Sgiacomo.travaglini@arm.com // Gets the number of tests to be printed in the XML report. 82613481Sgiacomo.travaglini@arm.com int reportable_test_count() const; 82713481Sgiacomo.travaglini@arm.com 82813481Sgiacomo.travaglini@arm.com // Get the number of tests in this test case that should run. 82913481Sgiacomo.travaglini@arm.com int test_to_run_count() const; 83013481Sgiacomo.travaglini@arm.com 83113481Sgiacomo.travaglini@arm.com // Gets the number of all tests in this test case. 83213481Sgiacomo.travaglini@arm.com int total_test_count() const; 83313481Sgiacomo.travaglini@arm.com 83413481Sgiacomo.travaglini@arm.com // Returns true iff the test case passed. 83513481Sgiacomo.travaglini@arm.com bool Passed() const { return !Failed(); } 83613481Sgiacomo.travaglini@arm.com 83713481Sgiacomo.travaglini@arm.com // Returns true iff the test case failed. 83813481Sgiacomo.travaglini@arm.com bool Failed() const { return failed_test_count() > 0; } 83913481Sgiacomo.travaglini@arm.com 84013481Sgiacomo.travaglini@arm.com // Returns the elapsed time, in milliseconds. 84113481Sgiacomo.travaglini@arm.com TimeInMillis elapsed_time() const { return elapsed_time_; } 84213481Sgiacomo.travaglini@arm.com 84313481Sgiacomo.travaglini@arm.com // Returns the i-th test among all the tests. i can range from 0 to 84413481Sgiacomo.travaglini@arm.com // total_test_count() - 1. If i is not in that range, returns NULL. 84513481Sgiacomo.travaglini@arm.com const TestInfo* GetTestInfo(int i) const; 84613481Sgiacomo.travaglini@arm.com 84713481Sgiacomo.travaglini@arm.com // Returns the TestResult that holds test properties recorded during 84813481Sgiacomo.travaglini@arm.com // execution of SetUpTestCase and TearDownTestCase. 84913481Sgiacomo.travaglini@arm.com const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; } 85013481Sgiacomo.travaglini@arm.com 85113481Sgiacomo.travaglini@arm.com private: 85213481Sgiacomo.travaglini@arm.com friend class Test; 85313481Sgiacomo.travaglini@arm.com friend class internal::UnitTestImpl; 85413481Sgiacomo.travaglini@arm.com 85513481Sgiacomo.travaglini@arm.com // Gets the (mutable) vector of TestInfos in this TestCase. 85613481Sgiacomo.travaglini@arm.com std::vector<TestInfo*>& test_info_list() { return test_info_list_; } 85713481Sgiacomo.travaglini@arm.com 85813481Sgiacomo.travaglini@arm.com // Gets the (immutable) vector of TestInfos in this TestCase. 85913481Sgiacomo.travaglini@arm.com const std::vector<TestInfo*>& test_info_list() const { 86013481Sgiacomo.travaglini@arm.com return test_info_list_; 86113481Sgiacomo.travaglini@arm.com } 86213481Sgiacomo.travaglini@arm.com 86313481Sgiacomo.travaglini@arm.com // Returns the i-th test among all the tests. i can range from 0 to 86413481Sgiacomo.travaglini@arm.com // total_test_count() - 1. If i is not in that range, returns NULL. 86513481Sgiacomo.travaglini@arm.com TestInfo* GetMutableTestInfo(int i); 86613481Sgiacomo.travaglini@arm.com 86713481Sgiacomo.travaglini@arm.com // Sets the should_run member. 86813481Sgiacomo.travaglini@arm.com void set_should_run(bool should) { should_run_ = should; } 86913481Sgiacomo.travaglini@arm.com 87013481Sgiacomo.travaglini@arm.com // Adds a TestInfo to this test case. Will delete the TestInfo upon 87113481Sgiacomo.travaglini@arm.com // destruction of the TestCase object. 87213481Sgiacomo.travaglini@arm.com void AddTestInfo(TestInfo * test_info); 87313481Sgiacomo.travaglini@arm.com 87413481Sgiacomo.travaglini@arm.com // Clears the results of all tests in this test case. 87513481Sgiacomo.travaglini@arm.com void ClearResult(); 87613481Sgiacomo.travaglini@arm.com 87713481Sgiacomo.travaglini@arm.com // Clears the results of all tests in the given test case. 87813481Sgiacomo.travaglini@arm.com static void ClearTestCaseResult(TestCase* test_case) { 87913481Sgiacomo.travaglini@arm.com test_case->ClearResult(); 88013481Sgiacomo.travaglini@arm.com } 88113481Sgiacomo.travaglini@arm.com 88213481Sgiacomo.travaglini@arm.com // Runs every test in this TestCase. 88313481Sgiacomo.travaglini@arm.com void Run(); 88413481Sgiacomo.travaglini@arm.com 88513481Sgiacomo.travaglini@arm.com // Runs SetUpTestCase() for this TestCase. This wrapper is needed 88613481Sgiacomo.travaglini@arm.com // for catching exceptions thrown from SetUpTestCase(). 88713481Sgiacomo.travaglini@arm.com void RunSetUpTestCase() { (*set_up_tc_)(); } 88813481Sgiacomo.travaglini@arm.com 88913481Sgiacomo.travaglini@arm.com // Runs TearDownTestCase() for this TestCase. This wrapper is 89013481Sgiacomo.travaglini@arm.com // needed for catching exceptions thrown from TearDownTestCase(). 89113481Sgiacomo.travaglini@arm.com void RunTearDownTestCase() { (*tear_down_tc_)(); } 89213481Sgiacomo.travaglini@arm.com 89313481Sgiacomo.travaglini@arm.com // Returns true iff test passed. 89413481Sgiacomo.travaglini@arm.com static bool TestPassed(const TestInfo* test_info) { 89513481Sgiacomo.travaglini@arm.com return test_info->should_run() && test_info->result()->Passed(); 89613481Sgiacomo.travaglini@arm.com } 89713481Sgiacomo.travaglini@arm.com 89813481Sgiacomo.travaglini@arm.com // Returns true iff test failed. 89913481Sgiacomo.travaglini@arm.com static bool TestFailed(const TestInfo* test_info) { 90013481Sgiacomo.travaglini@arm.com return test_info->should_run() && test_info->result()->Failed(); 90113481Sgiacomo.travaglini@arm.com } 90213481Sgiacomo.travaglini@arm.com 90313481Sgiacomo.travaglini@arm.com // Returns true iff the test is disabled and will be reported in the XML 90413481Sgiacomo.travaglini@arm.com // report. 90513481Sgiacomo.travaglini@arm.com static bool TestReportableDisabled(const TestInfo* test_info) { 90613481Sgiacomo.travaglini@arm.com return test_info->is_reportable() && test_info->is_disabled_; 90713481Sgiacomo.travaglini@arm.com } 90813481Sgiacomo.travaglini@arm.com 90913481Sgiacomo.travaglini@arm.com // Returns true iff test is disabled. 91013481Sgiacomo.travaglini@arm.com static bool TestDisabled(const TestInfo* test_info) { 91113481Sgiacomo.travaglini@arm.com return test_info->is_disabled_; 91213481Sgiacomo.travaglini@arm.com } 91313481Sgiacomo.travaglini@arm.com 91413481Sgiacomo.travaglini@arm.com // Returns true iff this test will appear in the XML report. 91513481Sgiacomo.travaglini@arm.com static bool TestReportable(const TestInfo* test_info) { 91613481Sgiacomo.travaglini@arm.com return test_info->is_reportable(); 91713481Sgiacomo.travaglini@arm.com } 91813481Sgiacomo.travaglini@arm.com 91913481Sgiacomo.travaglini@arm.com // Returns true if the given test should run. 92013481Sgiacomo.travaglini@arm.com static bool ShouldRunTest(const TestInfo* test_info) { 92113481Sgiacomo.travaglini@arm.com return test_info->should_run(); 92213481Sgiacomo.travaglini@arm.com } 92313481Sgiacomo.travaglini@arm.com 92413481Sgiacomo.travaglini@arm.com // Shuffles the tests in this test case. 92513481Sgiacomo.travaglini@arm.com void ShuffleTests(internal::Random* random); 92613481Sgiacomo.travaglini@arm.com 92713481Sgiacomo.travaglini@arm.com // Restores the test order to before the first shuffle. 92813481Sgiacomo.travaglini@arm.com void UnshuffleTests(); 92913481Sgiacomo.travaglini@arm.com 93013481Sgiacomo.travaglini@arm.com // Name of the test case. 93113481Sgiacomo.travaglini@arm.com std::string name_; 93213481Sgiacomo.travaglini@arm.com // Name of the parameter type, or NULL if this is not a typed or a 93313481Sgiacomo.travaglini@arm.com // type-parameterized test. 93413481Sgiacomo.travaglini@arm.com const internal::scoped_ptr<const ::std::string> type_param_; 93513481Sgiacomo.travaglini@arm.com // The vector of TestInfos in their original order. It owns the 93613481Sgiacomo.travaglini@arm.com // elements in the vector. 93713481Sgiacomo.travaglini@arm.com std::vector<TestInfo*> test_info_list_; 93813481Sgiacomo.travaglini@arm.com // Provides a level of indirection for the test list to allow easy 93913481Sgiacomo.travaglini@arm.com // shuffling and restoring the test order. The i-th element in this 94013481Sgiacomo.travaglini@arm.com // vector is the index of the i-th test in the shuffled test list. 94113481Sgiacomo.travaglini@arm.com std::vector<int> test_indices_; 94213481Sgiacomo.travaglini@arm.com // Pointer to the function that sets up the test case. 94313481Sgiacomo.travaglini@arm.com Test::SetUpTestCaseFunc set_up_tc_; 94413481Sgiacomo.travaglini@arm.com // Pointer to the function that tears down the test case. 94513481Sgiacomo.travaglini@arm.com Test::TearDownTestCaseFunc tear_down_tc_; 94613481Sgiacomo.travaglini@arm.com // True iff any test in this test case should run. 94713481Sgiacomo.travaglini@arm.com bool should_run_; 94813481Sgiacomo.travaglini@arm.com // Elapsed time, in milliseconds. 94913481Sgiacomo.travaglini@arm.com TimeInMillis elapsed_time_; 95013481Sgiacomo.travaglini@arm.com // Holds test properties recorded during execution of SetUpTestCase and 95113481Sgiacomo.travaglini@arm.com // TearDownTestCase. 95213481Sgiacomo.travaglini@arm.com TestResult ad_hoc_test_result_; 95313481Sgiacomo.travaglini@arm.com 95413481Sgiacomo.travaglini@arm.com // We disallow copying TestCases. 95513481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase); 95613481Sgiacomo.travaglini@arm.com}; 95713481Sgiacomo.travaglini@arm.com 95813481Sgiacomo.travaglini@arm.com// An Environment object is capable of setting up and tearing down an 95913481Sgiacomo.travaglini@arm.com// environment. You should subclass this to define your own 96013481Sgiacomo.travaglini@arm.com// environment(s). 96113481Sgiacomo.travaglini@arm.com// 96213481Sgiacomo.travaglini@arm.com// An Environment object does the set-up and tear-down in virtual 96313481Sgiacomo.travaglini@arm.com// methods SetUp() and TearDown() instead of the constructor and the 96413481Sgiacomo.travaglini@arm.com// destructor, as: 96513481Sgiacomo.travaglini@arm.com// 96613481Sgiacomo.travaglini@arm.com// 1. You cannot safely throw from a destructor. This is a problem 96713481Sgiacomo.travaglini@arm.com// as in some cases Google Test is used where exceptions are enabled, and 96813481Sgiacomo.travaglini@arm.com// we may want to implement ASSERT_* using exceptions where they are 96913481Sgiacomo.travaglini@arm.com// available. 97013481Sgiacomo.travaglini@arm.com// 2. You cannot use ASSERT_* directly in a constructor or 97113481Sgiacomo.travaglini@arm.com// destructor. 97213481Sgiacomo.travaglini@arm.comclass Environment { 97313481Sgiacomo.travaglini@arm.com public: 97413481Sgiacomo.travaglini@arm.com // The d'tor is virtual as we need to subclass Environment. 97513481Sgiacomo.travaglini@arm.com virtual ~Environment() {} 97613481Sgiacomo.travaglini@arm.com 97713481Sgiacomo.travaglini@arm.com // Override this to define how to set up the environment. 97813481Sgiacomo.travaglini@arm.com virtual void SetUp() {} 97913481Sgiacomo.travaglini@arm.com 98013481Sgiacomo.travaglini@arm.com // Override this to define how to tear down the environment. 98113481Sgiacomo.travaglini@arm.com virtual void TearDown() {} 98213481Sgiacomo.travaglini@arm.com private: 98313481Sgiacomo.travaglini@arm.com // If you see an error about overriding the following function or 98413481Sgiacomo.travaglini@arm.com // about it being private, you have mis-spelled SetUp() as Setup(). 98513481Sgiacomo.travaglini@arm.com struct Setup_should_be_spelled_SetUp {}; 98613481Sgiacomo.travaglini@arm.com virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } 98713481Sgiacomo.travaglini@arm.com}; 98813481Sgiacomo.travaglini@arm.com 98913481Sgiacomo.travaglini@arm.com// The interface for tracing execution of tests. The methods are organized in 99013481Sgiacomo.travaglini@arm.com// the order the corresponding events are fired. 99113481Sgiacomo.travaglini@arm.comclass TestEventListener { 99213481Sgiacomo.travaglini@arm.com public: 99313481Sgiacomo.travaglini@arm.com virtual ~TestEventListener() {} 99413481Sgiacomo.travaglini@arm.com 99513481Sgiacomo.travaglini@arm.com // Fired before any test activity starts. 99613481Sgiacomo.travaglini@arm.com virtual void OnTestProgramStart(const UnitTest& unit_test) = 0; 99713481Sgiacomo.travaglini@arm.com 99813481Sgiacomo.travaglini@arm.com // Fired before each iteration of tests starts. There may be more than 99913481Sgiacomo.travaglini@arm.com // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration 100013481Sgiacomo.travaglini@arm.com // index, starting from 0. 100113481Sgiacomo.travaglini@arm.com virtual void OnTestIterationStart(const UnitTest& unit_test, 100213481Sgiacomo.travaglini@arm.com int iteration) = 0; 100313481Sgiacomo.travaglini@arm.com 100413481Sgiacomo.travaglini@arm.com // Fired before environment set-up for each iteration of tests starts. 100513481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0; 100613481Sgiacomo.travaglini@arm.com 100713481Sgiacomo.travaglini@arm.com // Fired after environment set-up for each iteration of tests ends. 100813481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0; 100913481Sgiacomo.travaglini@arm.com 101013481Sgiacomo.travaglini@arm.com // Fired before the test case starts. 101113481Sgiacomo.travaglini@arm.com virtual void OnTestCaseStart(const TestCase& test_case) = 0; 101213481Sgiacomo.travaglini@arm.com 101313481Sgiacomo.travaglini@arm.com // Fired before the test starts. 101413481Sgiacomo.travaglini@arm.com virtual void OnTestStart(const TestInfo& test_info) = 0; 101513481Sgiacomo.travaglini@arm.com 101613481Sgiacomo.travaglini@arm.com // Fired after a failed assertion or a SUCCEED() invocation. 101713481Sgiacomo.travaglini@arm.com virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0; 101813481Sgiacomo.travaglini@arm.com 101913481Sgiacomo.travaglini@arm.com // Fired after the test ends. 102013481Sgiacomo.travaglini@arm.com virtual void OnTestEnd(const TestInfo& test_info) = 0; 102113481Sgiacomo.travaglini@arm.com 102213481Sgiacomo.travaglini@arm.com // Fired after the test case ends. 102313481Sgiacomo.travaglini@arm.com virtual void OnTestCaseEnd(const TestCase& test_case) = 0; 102413481Sgiacomo.travaglini@arm.com 102513481Sgiacomo.travaglini@arm.com // Fired before environment tear-down for each iteration of tests starts. 102613481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0; 102713481Sgiacomo.travaglini@arm.com 102813481Sgiacomo.travaglini@arm.com // Fired after environment tear-down for each iteration of tests ends. 102913481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0; 103013481Sgiacomo.travaglini@arm.com 103113481Sgiacomo.travaglini@arm.com // Fired after each iteration of tests finishes. 103213481Sgiacomo.travaglini@arm.com virtual void OnTestIterationEnd(const UnitTest& unit_test, 103313481Sgiacomo.travaglini@arm.com int iteration) = 0; 103413481Sgiacomo.travaglini@arm.com 103513481Sgiacomo.travaglini@arm.com // Fired after all test activities have ended. 103613481Sgiacomo.travaglini@arm.com virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0; 103713481Sgiacomo.travaglini@arm.com}; 103813481Sgiacomo.travaglini@arm.com 103913481Sgiacomo.travaglini@arm.com// The convenience class for users who need to override just one or two 104013481Sgiacomo.travaglini@arm.com// methods and are not concerned that a possible change to a signature of 104113481Sgiacomo.travaglini@arm.com// the methods they override will not be caught during the build. For 104213481Sgiacomo.travaglini@arm.com// comments about each method please see the definition of TestEventListener 104313481Sgiacomo.travaglini@arm.com// above. 104413481Sgiacomo.travaglini@arm.comclass EmptyTestEventListener : public TestEventListener { 104513481Sgiacomo.travaglini@arm.com public: 104613481Sgiacomo.travaglini@arm.com virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {} 104713481Sgiacomo.travaglini@arm.com virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, 104813481Sgiacomo.travaglini@arm.com int /*iteration*/) {} 104913481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {} 105013481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {} 105113481Sgiacomo.travaglini@arm.com virtual void OnTestCaseStart(const TestCase& /*test_case*/) {} 105213481Sgiacomo.travaglini@arm.com virtual void OnTestStart(const TestInfo& /*test_info*/) {} 105313481Sgiacomo.travaglini@arm.com virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {} 105413481Sgiacomo.travaglini@arm.com virtual void OnTestEnd(const TestInfo& /*test_info*/) {} 105513481Sgiacomo.travaglini@arm.com virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {} 105613481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {} 105713481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {} 105813481Sgiacomo.travaglini@arm.com virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, 105913481Sgiacomo.travaglini@arm.com int /*iteration*/) {} 106013481Sgiacomo.travaglini@arm.com virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {} 106113481Sgiacomo.travaglini@arm.com}; 106213481Sgiacomo.travaglini@arm.com 106313481Sgiacomo.travaglini@arm.com// TestEventListeners lets users add listeners to track events in Google Test. 106413481Sgiacomo.travaglini@arm.comclass GTEST_API_ TestEventListeners { 106513481Sgiacomo.travaglini@arm.com public: 106613481Sgiacomo.travaglini@arm.com TestEventListeners(); 106713481Sgiacomo.travaglini@arm.com ~TestEventListeners(); 106813481Sgiacomo.travaglini@arm.com 106913481Sgiacomo.travaglini@arm.com // Appends an event listener to the end of the list. Google Test assumes 107013481Sgiacomo.travaglini@arm.com // the ownership of the listener (i.e. it will delete the listener when 107113481Sgiacomo.travaglini@arm.com // the test program finishes). 107213481Sgiacomo.travaglini@arm.com void Append(TestEventListener* listener); 107313481Sgiacomo.travaglini@arm.com 107413481Sgiacomo.travaglini@arm.com // Removes the given event listener from the list and returns it. It then 107513481Sgiacomo.travaglini@arm.com // becomes the caller's responsibility to delete the listener. Returns 107613481Sgiacomo.travaglini@arm.com // NULL if the listener is not found in the list. 107713481Sgiacomo.travaglini@arm.com TestEventListener* Release(TestEventListener* listener); 107813481Sgiacomo.travaglini@arm.com 107913481Sgiacomo.travaglini@arm.com // Returns the standard listener responsible for the default console 108013481Sgiacomo.travaglini@arm.com // output. Can be removed from the listeners list to shut down default 108113481Sgiacomo.travaglini@arm.com // console output. Note that removing this object from the listener list 108213481Sgiacomo.travaglini@arm.com // with Release transfers its ownership to the caller and makes this 108313481Sgiacomo.travaglini@arm.com // function return NULL the next time. 108413481Sgiacomo.travaglini@arm.com TestEventListener* default_result_printer() const { 108513481Sgiacomo.travaglini@arm.com return default_result_printer_; 108613481Sgiacomo.travaglini@arm.com } 108713481Sgiacomo.travaglini@arm.com 108813481Sgiacomo.travaglini@arm.com // Returns the standard listener responsible for the default XML output 108913481Sgiacomo.travaglini@arm.com // controlled by the --gtest_output=xml flag. Can be removed from the 109013481Sgiacomo.travaglini@arm.com // listeners list by users who want to shut down the default XML output 109113481Sgiacomo.travaglini@arm.com // controlled by this flag and substitute it with custom one. Note that 109213481Sgiacomo.travaglini@arm.com // removing this object from the listener list with Release transfers its 109313481Sgiacomo.travaglini@arm.com // ownership to the caller and makes this function return NULL the next 109413481Sgiacomo.travaglini@arm.com // time. 109513481Sgiacomo.travaglini@arm.com TestEventListener* default_xml_generator() const { 109613481Sgiacomo.travaglini@arm.com return default_xml_generator_; 109713481Sgiacomo.travaglini@arm.com } 109813481Sgiacomo.travaglini@arm.com 109913481Sgiacomo.travaglini@arm.com private: 110013481Sgiacomo.travaglini@arm.com friend class TestCase; 110113481Sgiacomo.travaglini@arm.com friend class TestInfo; 110213481Sgiacomo.travaglini@arm.com friend class internal::DefaultGlobalTestPartResultReporter; 110313481Sgiacomo.travaglini@arm.com friend class internal::NoExecDeathTest; 110413481Sgiacomo.travaglini@arm.com friend class internal::TestEventListenersAccessor; 110513481Sgiacomo.travaglini@arm.com friend class internal::UnitTestImpl; 110613481Sgiacomo.travaglini@arm.com 110713481Sgiacomo.travaglini@arm.com // Returns repeater that broadcasts the TestEventListener events to all 110813481Sgiacomo.travaglini@arm.com // subscribers. 110913481Sgiacomo.travaglini@arm.com TestEventListener* repeater(); 111013481Sgiacomo.travaglini@arm.com 111113481Sgiacomo.travaglini@arm.com // Sets the default_result_printer attribute to the provided listener. 111213481Sgiacomo.travaglini@arm.com // The listener is also added to the listener list and previous 111313481Sgiacomo.travaglini@arm.com // default_result_printer is removed from it and deleted. The listener can 111413481Sgiacomo.travaglini@arm.com // also be NULL in which case it will not be added to the list. Does 111513481Sgiacomo.travaglini@arm.com // nothing if the previous and the current listener objects are the same. 111613481Sgiacomo.travaglini@arm.com void SetDefaultResultPrinter(TestEventListener* listener); 111713481Sgiacomo.travaglini@arm.com 111813481Sgiacomo.travaglini@arm.com // Sets the default_xml_generator attribute to the provided listener. The 111913481Sgiacomo.travaglini@arm.com // listener is also added to the listener list and previous 112013481Sgiacomo.travaglini@arm.com // default_xml_generator is removed from it and deleted. The listener can 112113481Sgiacomo.travaglini@arm.com // also be NULL in which case it will not be added to the list. Does 112213481Sgiacomo.travaglini@arm.com // nothing if the previous and the current listener objects are the same. 112313481Sgiacomo.travaglini@arm.com void SetDefaultXmlGenerator(TestEventListener* listener); 112413481Sgiacomo.travaglini@arm.com 112513481Sgiacomo.travaglini@arm.com // Controls whether events will be forwarded by the repeater to the 112613481Sgiacomo.travaglini@arm.com // listeners in the list. 112713481Sgiacomo.travaglini@arm.com bool EventForwardingEnabled() const; 112813481Sgiacomo.travaglini@arm.com void SuppressEventForwarding(); 112913481Sgiacomo.travaglini@arm.com 113013481Sgiacomo.travaglini@arm.com // The actual list of listeners. 113113481Sgiacomo.travaglini@arm.com internal::TestEventRepeater* repeater_; 113213481Sgiacomo.travaglini@arm.com // Listener responsible for the standard result output. 113313481Sgiacomo.travaglini@arm.com TestEventListener* default_result_printer_; 113413481Sgiacomo.travaglini@arm.com // Listener responsible for the creation of the XML output file. 113513481Sgiacomo.travaglini@arm.com TestEventListener* default_xml_generator_; 113613481Sgiacomo.travaglini@arm.com 113713481Sgiacomo.travaglini@arm.com // We disallow copying TestEventListeners. 113813481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners); 113913481Sgiacomo.travaglini@arm.com}; 114013481Sgiacomo.travaglini@arm.com 114113481Sgiacomo.travaglini@arm.com// A UnitTest consists of a vector of TestCases. 114213481Sgiacomo.travaglini@arm.com// 114313481Sgiacomo.travaglini@arm.com// This is a singleton class. The only instance of UnitTest is 114413481Sgiacomo.travaglini@arm.com// created when UnitTest::GetInstance() is first called. This 114513481Sgiacomo.travaglini@arm.com// instance is never deleted. 114613481Sgiacomo.travaglini@arm.com// 114713481Sgiacomo.travaglini@arm.com// UnitTest is not copyable. 114813481Sgiacomo.travaglini@arm.com// 114913481Sgiacomo.travaglini@arm.com// This class is thread-safe as long as the methods are called 115013481Sgiacomo.travaglini@arm.com// according to their specification. 115113481Sgiacomo.travaglini@arm.comclass GTEST_API_ UnitTest { 115213481Sgiacomo.travaglini@arm.com public: 115313481Sgiacomo.travaglini@arm.com // Gets the singleton UnitTest object. The first time this method 115413481Sgiacomo.travaglini@arm.com // is called, a UnitTest object is constructed and returned. 115513481Sgiacomo.travaglini@arm.com // Consecutive calls will return the same object. 115613481Sgiacomo.travaglini@arm.com static UnitTest* GetInstance(); 115713481Sgiacomo.travaglini@arm.com 115813481Sgiacomo.travaglini@arm.com // Runs all tests in this UnitTest object and prints the result. 115913481Sgiacomo.travaglini@arm.com // Returns 0 if successful, or 1 otherwise. 116013481Sgiacomo.travaglini@arm.com // 116113481Sgiacomo.travaglini@arm.com // This method can only be called from the main thread. 116213481Sgiacomo.travaglini@arm.com // 116313481Sgiacomo.travaglini@arm.com // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 116413481Sgiacomo.travaglini@arm.com int Run() GTEST_MUST_USE_RESULT_; 116513481Sgiacomo.travaglini@arm.com 116613481Sgiacomo.travaglini@arm.com // Returns the working directory when the first TEST() or TEST_F() 116713481Sgiacomo.travaglini@arm.com // was executed. The UnitTest object owns the string. 116813481Sgiacomo.travaglini@arm.com const char* original_working_dir() const; 116913481Sgiacomo.travaglini@arm.com 117013481Sgiacomo.travaglini@arm.com // Returns the TestCase object for the test that's currently running, 117113481Sgiacomo.travaglini@arm.com // or NULL if no test is running. 117213481Sgiacomo.travaglini@arm.com const TestCase* current_test_case() const 117313481Sgiacomo.travaglini@arm.com GTEST_LOCK_EXCLUDED_(mutex_); 117413481Sgiacomo.travaglini@arm.com 117513481Sgiacomo.travaglini@arm.com // Returns the TestInfo object for the test that's currently running, 117613481Sgiacomo.travaglini@arm.com // or NULL if no test is running. 117713481Sgiacomo.travaglini@arm.com const TestInfo* current_test_info() const 117813481Sgiacomo.travaglini@arm.com GTEST_LOCK_EXCLUDED_(mutex_); 117913481Sgiacomo.travaglini@arm.com 118013481Sgiacomo.travaglini@arm.com // Returns the random seed used at the start of the current test run. 118113481Sgiacomo.travaglini@arm.com int random_seed() const; 118213481Sgiacomo.travaglini@arm.com 118313481Sgiacomo.travaglini@arm.com#if GTEST_HAS_PARAM_TEST 118413481Sgiacomo.travaglini@arm.com // Returns the ParameterizedTestCaseRegistry object used to keep track of 118513481Sgiacomo.travaglini@arm.com // value-parameterized tests and instantiate and register them. 118613481Sgiacomo.travaglini@arm.com // 118713481Sgiacomo.travaglini@arm.com // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 118813481Sgiacomo.travaglini@arm.com internal::ParameterizedTestCaseRegistry& parameterized_test_registry() 118913481Sgiacomo.travaglini@arm.com GTEST_LOCK_EXCLUDED_(mutex_); 119013481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_PARAM_TEST 119113481Sgiacomo.travaglini@arm.com 119213481Sgiacomo.travaglini@arm.com // Gets the number of successful test cases. 119313481Sgiacomo.travaglini@arm.com int successful_test_case_count() const; 119413481Sgiacomo.travaglini@arm.com 119513481Sgiacomo.travaglini@arm.com // Gets the number of failed test cases. 119613481Sgiacomo.travaglini@arm.com int failed_test_case_count() const; 119713481Sgiacomo.travaglini@arm.com 119813481Sgiacomo.travaglini@arm.com // Gets the number of all test cases. 119913481Sgiacomo.travaglini@arm.com int total_test_case_count() const; 120013481Sgiacomo.travaglini@arm.com 120113481Sgiacomo.travaglini@arm.com // Gets the number of all test cases that contain at least one test 120213481Sgiacomo.travaglini@arm.com // that should run. 120313481Sgiacomo.travaglini@arm.com int test_case_to_run_count() const; 120413481Sgiacomo.travaglini@arm.com 120513481Sgiacomo.travaglini@arm.com // Gets the number of successful tests. 120613481Sgiacomo.travaglini@arm.com int successful_test_count() const; 120713481Sgiacomo.travaglini@arm.com 120813481Sgiacomo.travaglini@arm.com // Gets the number of failed tests. 120913481Sgiacomo.travaglini@arm.com int failed_test_count() const; 121013481Sgiacomo.travaglini@arm.com 121113481Sgiacomo.travaglini@arm.com // Gets the number of disabled tests that will be reported in the XML report. 121213481Sgiacomo.travaglini@arm.com int reportable_disabled_test_count() const; 121313481Sgiacomo.travaglini@arm.com 121413481Sgiacomo.travaglini@arm.com // Gets the number of disabled tests. 121513481Sgiacomo.travaglini@arm.com int disabled_test_count() const; 121613481Sgiacomo.travaglini@arm.com 121713481Sgiacomo.travaglini@arm.com // Gets the number of tests to be printed in the XML report. 121813481Sgiacomo.travaglini@arm.com int reportable_test_count() const; 121913481Sgiacomo.travaglini@arm.com 122013481Sgiacomo.travaglini@arm.com // Gets the number of all tests. 122113481Sgiacomo.travaglini@arm.com int total_test_count() const; 122213481Sgiacomo.travaglini@arm.com 122313481Sgiacomo.travaglini@arm.com // Gets the number of tests that should run. 122413481Sgiacomo.travaglini@arm.com int test_to_run_count() const; 122513481Sgiacomo.travaglini@arm.com 122613481Sgiacomo.travaglini@arm.com // Gets the time of the test program start, in ms from the start of the 122713481Sgiacomo.travaglini@arm.com // UNIX epoch. 122813481Sgiacomo.travaglini@arm.com TimeInMillis start_timestamp() const; 122913481Sgiacomo.travaglini@arm.com 123013481Sgiacomo.travaglini@arm.com // Gets the elapsed time, in milliseconds. 123113481Sgiacomo.travaglini@arm.com TimeInMillis elapsed_time() const; 123213481Sgiacomo.travaglini@arm.com 123313481Sgiacomo.travaglini@arm.com // Returns true iff the unit test passed (i.e. all test cases passed). 123413481Sgiacomo.travaglini@arm.com bool Passed() const; 123513481Sgiacomo.travaglini@arm.com 123613481Sgiacomo.travaglini@arm.com // Returns true iff the unit test failed (i.e. some test case failed 123713481Sgiacomo.travaglini@arm.com // or something outside of all tests failed). 123813481Sgiacomo.travaglini@arm.com bool Failed() const; 123913481Sgiacomo.travaglini@arm.com 124013481Sgiacomo.travaglini@arm.com // Gets the i-th test case among all the test cases. i can range from 0 to 124113481Sgiacomo.travaglini@arm.com // total_test_case_count() - 1. If i is not in that range, returns NULL. 124213481Sgiacomo.travaglini@arm.com const TestCase* GetTestCase(int i) const; 124313481Sgiacomo.travaglini@arm.com 124413481Sgiacomo.travaglini@arm.com // Returns the TestResult containing information on test failures and 124513481Sgiacomo.travaglini@arm.com // properties logged outside of individual test cases. 124613481Sgiacomo.travaglini@arm.com const TestResult& ad_hoc_test_result() const; 124713481Sgiacomo.travaglini@arm.com 124813481Sgiacomo.travaglini@arm.com // Returns the list of event listeners that can be used to track events 124913481Sgiacomo.travaglini@arm.com // inside Google Test. 125013481Sgiacomo.travaglini@arm.com TestEventListeners& listeners(); 125113481Sgiacomo.travaglini@arm.com 125213481Sgiacomo.travaglini@arm.com private: 125313481Sgiacomo.travaglini@arm.com // Registers and returns a global test environment. When a test 125413481Sgiacomo.travaglini@arm.com // program is run, all global test environments will be set-up in 125513481Sgiacomo.travaglini@arm.com // the order they were registered. After all tests in the program 125613481Sgiacomo.travaglini@arm.com // have finished, all global test environments will be torn-down in 125713481Sgiacomo.travaglini@arm.com // the *reverse* order they were registered. 125813481Sgiacomo.travaglini@arm.com // 125913481Sgiacomo.travaglini@arm.com // The UnitTest object takes ownership of the given environment. 126013481Sgiacomo.travaglini@arm.com // 126113481Sgiacomo.travaglini@arm.com // This method can only be called from the main thread. 126213481Sgiacomo.travaglini@arm.com Environment* AddEnvironment(Environment* env); 126313481Sgiacomo.travaglini@arm.com 126413481Sgiacomo.travaglini@arm.com // Adds a TestPartResult to the current TestResult object. All 126513481Sgiacomo.travaglini@arm.com // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) 126613481Sgiacomo.travaglini@arm.com // eventually call this to report their results. The user code 126713481Sgiacomo.travaglini@arm.com // should use the assertion macros instead of calling this directly. 126813481Sgiacomo.travaglini@arm.com void AddTestPartResult(TestPartResult::Type result_type, 126913481Sgiacomo.travaglini@arm.com const char* file_name, 127013481Sgiacomo.travaglini@arm.com int line_number, 127113481Sgiacomo.travaglini@arm.com const std::string& message, 127213481Sgiacomo.travaglini@arm.com const std::string& os_stack_trace) 127313481Sgiacomo.travaglini@arm.com GTEST_LOCK_EXCLUDED_(mutex_); 127413481Sgiacomo.travaglini@arm.com 127513481Sgiacomo.travaglini@arm.com // Adds a TestProperty to the current TestResult object when invoked from 127613481Sgiacomo.travaglini@arm.com // inside a test, to current TestCase's ad_hoc_test_result_ when invoked 127713481Sgiacomo.travaglini@arm.com // from SetUpTestCase or TearDownTestCase, or to the global property set 127813481Sgiacomo.travaglini@arm.com // when invoked elsewhere. If the result already contains a property with 127913481Sgiacomo.travaglini@arm.com // the same key, the value will be updated. 128013481Sgiacomo.travaglini@arm.com void RecordProperty(const std::string& key, const std::string& value); 128113481Sgiacomo.travaglini@arm.com 128213481Sgiacomo.travaglini@arm.com // Gets the i-th test case among all the test cases. i can range from 0 to 128313481Sgiacomo.travaglini@arm.com // total_test_case_count() - 1. If i is not in that range, returns NULL. 128413481Sgiacomo.travaglini@arm.com TestCase* GetMutableTestCase(int i); 128513481Sgiacomo.travaglini@arm.com 128613481Sgiacomo.travaglini@arm.com // Accessors for the implementation object. 128713481Sgiacomo.travaglini@arm.com internal::UnitTestImpl* impl() { return impl_; } 128813481Sgiacomo.travaglini@arm.com const internal::UnitTestImpl* impl() const { return impl_; } 128913481Sgiacomo.travaglini@arm.com 129013481Sgiacomo.travaglini@arm.com // These classes and funcions are friends as they need to access private 129113481Sgiacomo.travaglini@arm.com // members of UnitTest. 129213481Sgiacomo.travaglini@arm.com friend class Test; 129313481Sgiacomo.travaglini@arm.com friend class internal::AssertHelper; 129413481Sgiacomo.travaglini@arm.com friend class internal::ScopedTrace; 129513481Sgiacomo.travaglini@arm.com friend class internal::StreamingListenerTest; 129613481Sgiacomo.travaglini@arm.com friend class internal::UnitTestRecordPropertyTestHelper; 129713481Sgiacomo.travaglini@arm.com friend Environment* AddGlobalTestEnvironment(Environment* env); 129813481Sgiacomo.travaglini@arm.com friend internal::UnitTestImpl* internal::GetUnitTestImpl(); 129913481Sgiacomo.travaglini@arm.com friend void internal::ReportFailureInUnknownLocation( 130013481Sgiacomo.travaglini@arm.com TestPartResult::Type result_type, 130113481Sgiacomo.travaglini@arm.com const std::string& message); 130213481Sgiacomo.travaglini@arm.com 130313481Sgiacomo.travaglini@arm.com // Creates an empty UnitTest. 130413481Sgiacomo.travaglini@arm.com UnitTest(); 130513481Sgiacomo.travaglini@arm.com 130613481Sgiacomo.travaglini@arm.com // D'tor 130713481Sgiacomo.travaglini@arm.com virtual ~UnitTest(); 130813481Sgiacomo.travaglini@arm.com 130913481Sgiacomo.travaglini@arm.com // Pushes a trace defined by SCOPED_TRACE() on to the per-thread 131013481Sgiacomo.travaglini@arm.com // Google Test trace stack. 131113481Sgiacomo.travaglini@arm.com void PushGTestTrace(const internal::TraceInfo& trace) 131213481Sgiacomo.travaglini@arm.com GTEST_LOCK_EXCLUDED_(mutex_); 131313481Sgiacomo.travaglini@arm.com 131413481Sgiacomo.travaglini@arm.com // Pops a trace from the per-thread Google Test trace stack. 131513481Sgiacomo.travaglini@arm.com void PopGTestTrace() 131613481Sgiacomo.travaglini@arm.com GTEST_LOCK_EXCLUDED_(mutex_); 131713481Sgiacomo.travaglini@arm.com 131813481Sgiacomo.travaglini@arm.com // Protects mutable state in *impl_. This is mutable as some const 131913481Sgiacomo.travaglini@arm.com // methods need to lock it too. 132013481Sgiacomo.travaglini@arm.com mutable internal::Mutex mutex_; 132113481Sgiacomo.travaglini@arm.com 132213481Sgiacomo.travaglini@arm.com // Opaque implementation object. This field is never changed once 132313481Sgiacomo.travaglini@arm.com // the object is constructed. We don't mark it as const here, as 132413481Sgiacomo.travaglini@arm.com // doing so will cause a warning in the constructor of UnitTest. 132513481Sgiacomo.travaglini@arm.com // Mutable state in *impl_ is protected by mutex_. 132613481Sgiacomo.travaglini@arm.com internal::UnitTestImpl* impl_; 132713481Sgiacomo.travaglini@arm.com 132813481Sgiacomo.travaglini@arm.com // We disallow copying UnitTest. 132913481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest); 133013481Sgiacomo.travaglini@arm.com}; 133113481Sgiacomo.travaglini@arm.com 133213481Sgiacomo.travaglini@arm.com// A convenient wrapper for adding an environment for the test 133313481Sgiacomo.travaglini@arm.com// program. 133413481Sgiacomo.travaglini@arm.com// 133513481Sgiacomo.travaglini@arm.com// You should call this before RUN_ALL_TESTS() is called, probably in 133613481Sgiacomo.travaglini@arm.com// main(). If you use gtest_main, you need to call this before main() 133713481Sgiacomo.travaglini@arm.com// starts for it to take effect. For example, you can define a global 133813481Sgiacomo.travaglini@arm.com// variable like this: 133913481Sgiacomo.travaglini@arm.com// 134013481Sgiacomo.travaglini@arm.com// testing::Environment* const foo_env = 134113481Sgiacomo.travaglini@arm.com// testing::AddGlobalTestEnvironment(new FooEnvironment); 134213481Sgiacomo.travaglini@arm.com// 134313481Sgiacomo.travaglini@arm.com// However, we strongly recommend you to write your own main() and 134413481Sgiacomo.travaglini@arm.com// call AddGlobalTestEnvironment() there, as relying on initialization 134513481Sgiacomo.travaglini@arm.com// of global variables makes the code harder to read and may cause 134613481Sgiacomo.travaglini@arm.com// problems when you register multiple environments from different 134713481Sgiacomo.travaglini@arm.com// translation units and the environments have dependencies among them 134813481Sgiacomo.travaglini@arm.com// (remember that the compiler doesn't guarantee the order in which 134913481Sgiacomo.travaglini@arm.com// global variables from different translation units are initialized). 135013481Sgiacomo.travaglini@arm.cominline Environment* AddGlobalTestEnvironment(Environment* env) { 135113481Sgiacomo.travaglini@arm.com return UnitTest::GetInstance()->AddEnvironment(env); 135213481Sgiacomo.travaglini@arm.com} 135313481Sgiacomo.travaglini@arm.com 135413481Sgiacomo.travaglini@arm.com// Initializes Google Test. This must be called before calling 135513481Sgiacomo.travaglini@arm.com// RUN_ALL_TESTS(). In particular, it parses a command line for the 135613481Sgiacomo.travaglini@arm.com// flags that Google Test recognizes. Whenever a Google Test flag is 135713481Sgiacomo.travaglini@arm.com// seen, it is removed from argv, and *argc is decremented. 135813481Sgiacomo.travaglini@arm.com// 135913481Sgiacomo.travaglini@arm.com// No value is returned. Instead, the Google Test flag variables are 136013481Sgiacomo.travaglini@arm.com// updated. 136113481Sgiacomo.travaglini@arm.com// 136213481Sgiacomo.travaglini@arm.com// Calling the function for the second time has no user-visible effect. 136313481Sgiacomo.travaglini@arm.comGTEST_API_ void InitGoogleTest(int* argc, char** argv); 136413481Sgiacomo.travaglini@arm.com 136513481Sgiacomo.travaglini@arm.com// This overloaded version can be used in Windows programs compiled in 136613481Sgiacomo.travaglini@arm.com// UNICODE mode. 136713481Sgiacomo.travaglini@arm.comGTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv); 136813481Sgiacomo.travaglini@arm.com 136913481Sgiacomo.travaglini@arm.comnamespace internal { 137013481Sgiacomo.travaglini@arm.com 137113481Sgiacomo.travaglini@arm.com// Separate the error generating code from the code path to reduce the stack 137213481Sgiacomo.travaglini@arm.com// frame size of CmpHelperEQ. This helps reduce the overhead of some sanitizers 137313481Sgiacomo.travaglini@arm.com// when calling EXPECT_* in a tight loop. 137413481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2> 137513481Sgiacomo.travaglini@arm.comAssertionResult CmpHelperEQFailure(const char* lhs_expression, 137613481Sgiacomo.travaglini@arm.com const char* rhs_expression, 137713481Sgiacomo.travaglini@arm.com const T1& lhs, const T2& rhs) { 137813481Sgiacomo.travaglini@arm.com return EqFailure(lhs_expression, 137913481Sgiacomo.travaglini@arm.com rhs_expression, 138013481Sgiacomo.travaglini@arm.com FormatForComparisonFailureMessage(lhs, rhs), 138113481Sgiacomo.travaglini@arm.com FormatForComparisonFailureMessage(rhs, lhs), 138213481Sgiacomo.travaglini@arm.com false); 138313481Sgiacomo.travaglini@arm.com} 138413481Sgiacomo.travaglini@arm.com 138513481Sgiacomo.travaglini@arm.com// The helper function for {ASSERT|EXPECT}_EQ. 138613481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2> 138713481Sgiacomo.travaglini@arm.comAssertionResult CmpHelperEQ(const char* lhs_expression, 138813481Sgiacomo.travaglini@arm.com const char* rhs_expression, 138913481Sgiacomo.travaglini@arm.com const T1& lhs, 139013481Sgiacomo.travaglini@arm.com const T2& rhs) { 139113481Sgiacomo.travaglini@arm.comGTEST_DISABLE_MSC_WARNINGS_PUSH_(4389 /* signed/unsigned mismatch */) 139213481Sgiacomo.travaglini@arm.com if (lhs == rhs) { 139313481Sgiacomo.travaglini@arm.com return AssertionSuccess(); 139413481Sgiacomo.travaglini@arm.com } 139513481Sgiacomo.travaglini@arm.comGTEST_DISABLE_MSC_WARNINGS_POP_() 139613481Sgiacomo.travaglini@arm.com 139713481Sgiacomo.travaglini@arm.com return CmpHelperEQFailure(lhs_expression, rhs_expression, lhs, rhs); 139813481Sgiacomo.travaglini@arm.com} 139913481Sgiacomo.travaglini@arm.com 140013481Sgiacomo.travaglini@arm.com// With this overloaded version, we allow anonymous enums to be used 140113481Sgiacomo.travaglini@arm.com// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums 140213481Sgiacomo.travaglini@arm.com// can be implicitly cast to BiggestInt. 140313481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult CmpHelperEQ(const char* lhs_expression, 140413481Sgiacomo.travaglini@arm.com const char* rhs_expression, 140513481Sgiacomo.travaglini@arm.com BiggestInt lhs, 140613481Sgiacomo.travaglini@arm.com BiggestInt rhs); 140713481Sgiacomo.travaglini@arm.com 140813481Sgiacomo.travaglini@arm.com// The helper class for {ASSERT|EXPECT}_EQ. The template argument 140913481Sgiacomo.travaglini@arm.com// lhs_is_null_literal is true iff the first argument to ASSERT_EQ() 141013481Sgiacomo.travaglini@arm.com// is a null pointer literal. The following default implementation is 141113481Sgiacomo.travaglini@arm.com// for lhs_is_null_literal being false. 141213481Sgiacomo.travaglini@arm.comtemplate <bool lhs_is_null_literal> 141313481Sgiacomo.travaglini@arm.comclass EqHelper { 141413481Sgiacomo.travaglini@arm.com public: 141513481Sgiacomo.travaglini@arm.com // This templatized version is for the general case. 141613481Sgiacomo.travaglini@arm.com template <typename T1, typename T2> 141713481Sgiacomo.travaglini@arm.com static AssertionResult Compare(const char* lhs_expression, 141813481Sgiacomo.travaglini@arm.com const char* rhs_expression, 141913481Sgiacomo.travaglini@arm.com const T1& lhs, 142013481Sgiacomo.travaglini@arm.com const T2& rhs) { 142113481Sgiacomo.travaglini@arm.com return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs); 142213481Sgiacomo.travaglini@arm.com } 142313481Sgiacomo.travaglini@arm.com 142413481Sgiacomo.travaglini@arm.com // With this overloaded version, we allow anonymous enums to be used 142513481Sgiacomo.travaglini@arm.com // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous 142613481Sgiacomo.travaglini@arm.com // enums can be implicitly cast to BiggestInt. 142713481Sgiacomo.travaglini@arm.com // 142813481Sgiacomo.travaglini@arm.com // Even though its body looks the same as the above version, we 142913481Sgiacomo.travaglini@arm.com // cannot merge the two, as it will make anonymous enums unhappy. 143013481Sgiacomo.travaglini@arm.com static AssertionResult Compare(const char* lhs_expression, 143113481Sgiacomo.travaglini@arm.com const char* rhs_expression, 143213481Sgiacomo.travaglini@arm.com BiggestInt lhs, 143313481Sgiacomo.travaglini@arm.com BiggestInt rhs) { 143413481Sgiacomo.travaglini@arm.com return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs); 143513481Sgiacomo.travaglini@arm.com } 143613481Sgiacomo.travaglini@arm.com}; 143713481Sgiacomo.travaglini@arm.com 143813481Sgiacomo.travaglini@arm.com// This specialization is used when the first argument to ASSERT_EQ() 143913481Sgiacomo.travaglini@arm.com// is a null pointer literal, like NULL, false, or 0. 144013481Sgiacomo.travaglini@arm.comtemplate <> 144113481Sgiacomo.travaglini@arm.comclass EqHelper<true> { 144213481Sgiacomo.travaglini@arm.com public: 144313481Sgiacomo.travaglini@arm.com // We define two overloaded versions of Compare(). The first 144413481Sgiacomo.travaglini@arm.com // version will be picked when the second argument to ASSERT_EQ() is 144513481Sgiacomo.travaglini@arm.com // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or 144613481Sgiacomo.travaglini@arm.com // EXPECT_EQ(false, a_bool). 144713481Sgiacomo.travaglini@arm.com template <typename T1, typename T2> 144813481Sgiacomo.travaglini@arm.com static AssertionResult Compare( 144913481Sgiacomo.travaglini@arm.com const char* lhs_expression, 145013481Sgiacomo.travaglini@arm.com const char* rhs_expression, 145113481Sgiacomo.travaglini@arm.com const T1& lhs, 145213481Sgiacomo.travaglini@arm.com const T2& rhs, 145313481Sgiacomo.travaglini@arm.com // The following line prevents this overload from being considered if T2 145413481Sgiacomo.travaglini@arm.com // is not a pointer type. We need this because ASSERT_EQ(NULL, my_ptr) 145513481Sgiacomo.travaglini@arm.com // expands to Compare("", "", NULL, my_ptr), which requires a conversion 145613481Sgiacomo.travaglini@arm.com // to match the Secret* in the other overload, which would otherwise make 145713481Sgiacomo.travaglini@arm.com // this template match better. 145813481Sgiacomo.travaglini@arm.com typename EnableIf<!is_pointer<T2>::value>::type* = 0) { 145913481Sgiacomo.travaglini@arm.com return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs); 146013481Sgiacomo.travaglini@arm.com } 146113481Sgiacomo.travaglini@arm.com 146213481Sgiacomo.travaglini@arm.com // This version will be picked when the second argument to ASSERT_EQ() is a 146313481Sgiacomo.travaglini@arm.com // pointer, e.g. ASSERT_EQ(NULL, a_pointer). 146413481Sgiacomo.travaglini@arm.com template <typename T> 146513481Sgiacomo.travaglini@arm.com static AssertionResult Compare( 146613481Sgiacomo.travaglini@arm.com const char* lhs_expression, 146713481Sgiacomo.travaglini@arm.com const char* rhs_expression, 146813481Sgiacomo.travaglini@arm.com // We used to have a second template parameter instead of Secret*. That 146913481Sgiacomo.travaglini@arm.com // template parameter would deduce to 'long', making this a better match 147013481Sgiacomo.travaglini@arm.com // than the first overload even without the first overload's EnableIf. 147113481Sgiacomo.travaglini@arm.com // Unfortunately, gcc with -Wconversion-null warns when "passing NULL to 147213481Sgiacomo.travaglini@arm.com // non-pointer argument" (even a deduced integral argument), so the old 147313481Sgiacomo.travaglini@arm.com // implementation caused warnings in user code. 147413481Sgiacomo.travaglini@arm.com Secret* /* lhs (NULL) */, 147513481Sgiacomo.travaglini@arm.com T* rhs) { 147613481Sgiacomo.travaglini@arm.com // We already know that 'lhs' is a null pointer. 147713481Sgiacomo.travaglini@arm.com return CmpHelperEQ(lhs_expression, rhs_expression, 147813481Sgiacomo.travaglini@arm.com static_cast<T*>(NULL), rhs); 147913481Sgiacomo.travaglini@arm.com } 148013481Sgiacomo.travaglini@arm.com}; 148113481Sgiacomo.travaglini@arm.com 148213481Sgiacomo.travaglini@arm.com// Separate the error generating code from the code path to reduce the stack 148313481Sgiacomo.travaglini@arm.com// frame size of CmpHelperOP. This helps reduce the overhead of some sanitizers 148413481Sgiacomo.travaglini@arm.com// when calling EXPECT_OP in a tight loop. 148513481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2> 148613481Sgiacomo.travaglini@arm.comAssertionResult CmpHelperOpFailure(const char* expr1, const char* expr2, 148713481Sgiacomo.travaglini@arm.com const T1& val1, const T2& val2, 148813481Sgiacomo.travaglini@arm.com const char* op) { 148913481Sgiacomo.travaglini@arm.com return AssertionFailure() 149013481Sgiacomo.travaglini@arm.com << "Expected: (" << expr1 << ") " << op << " (" << expr2 149113481Sgiacomo.travaglini@arm.com << "), actual: " << FormatForComparisonFailureMessage(val1, val2) 149213481Sgiacomo.travaglini@arm.com << " vs " << FormatForComparisonFailureMessage(val2, val1); 149313481Sgiacomo.travaglini@arm.com} 149413481Sgiacomo.travaglini@arm.com 149513481Sgiacomo.travaglini@arm.com// A macro for implementing the helper functions needed to implement 149613481Sgiacomo.travaglini@arm.com// ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste 149713481Sgiacomo.travaglini@arm.com// of similar code. 149813481Sgiacomo.travaglini@arm.com// 149913481Sgiacomo.travaglini@arm.com// For each templatized helper function, we also define an overloaded 150013481Sgiacomo.travaglini@arm.com// version for BiggestInt in order to reduce code bloat and allow 150113481Sgiacomo.travaglini@arm.com// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled 150213481Sgiacomo.travaglini@arm.com// with gcc 4. 150313481Sgiacomo.travaglini@arm.com// 150413481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 150513481Sgiacomo.travaglini@arm.com 150613481Sgiacomo.travaglini@arm.com#define GTEST_IMPL_CMP_HELPER_(op_name, op)\ 150713481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2>\ 150813481Sgiacomo.travaglini@arm.comAssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \ 150913481Sgiacomo.travaglini@arm.com const T1& val1, const T2& val2) {\ 151013481Sgiacomo.travaglini@arm.com if (val1 op val2) {\ 151113481Sgiacomo.travaglini@arm.com return AssertionSuccess();\ 151213481Sgiacomo.travaglini@arm.com } else {\ 151313481Sgiacomo.travaglini@arm.com return CmpHelperOpFailure(expr1, expr2, val1, val2, #op);\ 151413481Sgiacomo.travaglini@arm.com }\ 151513481Sgiacomo.travaglini@arm.com}\ 151613481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult CmpHelper##op_name(\ 151713481Sgiacomo.travaglini@arm.com const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2) 151813481Sgiacomo.travaglini@arm.com 151913481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 152013481Sgiacomo.travaglini@arm.com 152113481Sgiacomo.travaglini@arm.com// Implements the helper function for {ASSERT|EXPECT}_NE 152213481Sgiacomo.travaglini@arm.comGTEST_IMPL_CMP_HELPER_(NE, !=); 152313481Sgiacomo.travaglini@arm.com// Implements the helper function for {ASSERT|EXPECT}_LE 152413481Sgiacomo.travaglini@arm.comGTEST_IMPL_CMP_HELPER_(LE, <=); 152513481Sgiacomo.travaglini@arm.com// Implements the helper function for {ASSERT|EXPECT}_LT 152613481Sgiacomo.travaglini@arm.comGTEST_IMPL_CMP_HELPER_(LT, <); 152713481Sgiacomo.travaglini@arm.com// Implements the helper function for {ASSERT|EXPECT}_GE 152813481Sgiacomo.travaglini@arm.comGTEST_IMPL_CMP_HELPER_(GE, >=); 152913481Sgiacomo.travaglini@arm.com// Implements the helper function for {ASSERT|EXPECT}_GT 153013481Sgiacomo.travaglini@arm.comGTEST_IMPL_CMP_HELPER_(GT, >); 153113481Sgiacomo.travaglini@arm.com 153213481Sgiacomo.travaglini@arm.com#undef GTEST_IMPL_CMP_HELPER_ 153313481Sgiacomo.travaglini@arm.com 153413481Sgiacomo.travaglini@arm.com// The helper function for {ASSERT|EXPECT}_STREQ. 153513481Sgiacomo.travaglini@arm.com// 153613481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 153713481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult CmpHelperSTREQ(const char* s1_expression, 153813481Sgiacomo.travaglini@arm.com const char* s2_expression, 153913481Sgiacomo.travaglini@arm.com const char* s1, 154013481Sgiacomo.travaglini@arm.com const char* s2); 154113481Sgiacomo.travaglini@arm.com 154213481Sgiacomo.travaglini@arm.com// The helper function for {ASSERT|EXPECT}_STRCASEEQ. 154313481Sgiacomo.travaglini@arm.com// 154413481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 154513481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* s1_expression, 154613481Sgiacomo.travaglini@arm.com const char* s2_expression, 154713481Sgiacomo.travaglini@arm.com const char* s1, 154813481Sgiacomo.travaglini@arm.com const char* s2); 154913481Sgiacomo.travaglini@arm.com 155013481Sgiacomo.travaglini@arm.com// The helper function for {ASSERT|EXPECT}_STRNE. 155113481Sgiacomo.travaglini@arm.com// 155213481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 155313481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, 155413481Sgiacomo.travaglini@arm.com const char* s2_expression, 155513481Sgiacomo.travaglini@arm.com const char* s1, 155613481Sgiacomo.travaglini@arm.com const char* s2); 155713481Sgiacomo.travaglini@arm.com 155813481Sgiacomo.travaglini@arm.com// The helper function for {ASSERT|EXPECT}_STRCASENE. 155913481Sgiacomo.travaglini@arm.com// 156013481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 156113481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression, 156213481Sgiacomo.travaglini@arm.com const char* s2_expression, 156313481Sgiacomo.travaglini@arm.com const char* s1, 156413481Sgiacomo.travaglini@arm.com const char* s2); 156513481Sgiacomo.travaglini@arm.com 156613481Sgiacomo.travaglini@arm.com 156713481Sgiacomo.travaglini@arm.com// Helper function for *_STREQ on wide strings. 156813481Sgiacomo.travaglini@arm.com// 156913481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 157013481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult CmpHelperSTREQ(const char* s1_expression, 157113481Sgiacomo.travaglini@arm.com const char* s2_expression, 157213481Sgiacomo.travaglini@arm.com const wchar_t* s1, 157313481Sgiacomo.travaglini@arm.com const wchar_t* s2); 157413481Sgiacomo.travaglini@arm.com 157513481Sgiacomo.travaglini@arm.com// Helper function for *_STRNE on wide strings. 157613481Sgiacomo.travaglini@arm.com// 157713481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 157813481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression, 157913481Sgiacomo.travaglini@arm.com const char* s2_expression, 158013481Sgiacomo.travaglini@arm.com const wchar_t* s1, 158113481Sgiacomo.travaglini@arm.com const wchar_t* s2); 158213481Sgiacomo.travaglini@arm.com 158313481Sgiacomo.travaglini@arm.com} // namespace internal 158413481Sgiacomo.travaglini@arm.com 158513481Sgiacomo.travaglini@arm.com// IsSubstring() and IsNotSubstring() are intended to be used as the 158613481Sgiacomo.travaglini@arm.com// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by 158713481Sgiacomo.travaglini@arm.com// themselves. They check whether needle is a substring of haystack 158813481Sgiacomo.travaglini@arm.com// (NULL is considered a substring of itself only), and return an 158913481Sgiacomo.travaglini@arm.com// appropriate error message when they fail. 159013481Sgiacomo.travaglini@arm.com// 159113481Sgiacomo.travaglini@arm.com// The {needle,haystack}_expr arguments are the stringified 159213481Sgiacomo.travaglini@arm.com// expressions that generated the two real arguments. 159313481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult IsSubstring( 159413481Sgiacomo.travaglini@arm.com const char* needle_expr, const char* haystack_expr, 159513481Sgiacomo.travaglini@arm.com const char* needle, const char* haystack); 159613481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult IsSubstring( 159713481Sgiacomo.travaglini@arm.com const char* needle_expr, const char* haystack_expr, 159813481Sgiacomo.travaglini@arm.com const wchar_t* needle, const wchar_t* haystack); 159913481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult IsNotSubstring( 160013481Sgiacomo.travaglini@arm.com const char* needle_expr, const char* haystack_expr, 160113481Sgiacomo.travaglini@arm.com const char* needle, const char* haystack); 160213481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult IsNotSubstring( 160313481Sgiacomo.travaglini@arm.com const char* needle_expr, const char* haystack_expr, 160413481Sgiacomo.travaglini@arm.com const wchar_t* needle, const wchar_t* haystack); 160513481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult IsSubstring( 160613481Sgiacomo.travaglini@arm.com const char* needle_expr, const char* haystack_expr, 160713481Sgiacomo.travaglini@arm.com const ::std::string& needle, const ::std::string& haystack); 160813481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult IsNotSubstring( 160913481Sgiacomo.travaglini@arm.com const char* needle_expr, const char* haystack_expr, 161013481Sgiacomo.travaglini@arm.com const ::std::string& needle, const ::std::string& haystack); 161113481Sgiacomo.travaglini@arm.com 161213481Sgiacomo.travaglini@arm.com#if GTEST_HAS_STD_WSTRING 161313481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult IsSubstring( 161413481Sgiacomo.travaglini@arm.com const char* needle_expr, const char* haystack_expr, 161513481Sgiacomo.travaglini@arm.com const ::std::wstring& needle, const ::std::wstring& haystack); 161613481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult IsNotSubstring( 161713481Sgiacomo.travaglini@arm.com const char* needle_expr, const char* haystack_expr, 161813481Sgiacomo.travaglini@arm.com const ::std::wstring& needle, const ::std::wstring& haystack); 161913481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_STD_WSTRING 162013481Sgiacomo.travaglini@arm.com 162113481Sgiacomo.travaglini@arm.comnamespace internal { 162213481Sgiacomo.travaglini@arm.com 162313481Sgiacomo.travaglini@arm.com// Helper template function for comparing floating-points. 162413481Sgiacomo.travaglini@arm.com// 162513481Sgiacomo.travaglini@arm.com// Template parameter: 162613481Sgiacomo.travaglini@arm.com// 162713481Sgiacomo.travaglini@arm.com// RawType: the raw floating-point type (either float or double) 162813481Sgiacomo.travaglini@arm.com// 162913481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 163013481Sgiacomo.travaglini@arm.comtemplate <typename RawType> 163113481Sgiacomo.travaglini@arm.comAssertionResult CmpHelperFloatingPointEQ(const char* lhs_expression, 163213481Sgiacomo.travaglini@arm.com const char* rhs_expression, 163313481Sgiacomo.travaglini@arm.com RawType lhs_value, 163413481Sgiacomo.travaglini@arm.com RawType rhs_value) { 163513481Sgiacomo.travaglini@arm.com const FloatingPoint<RawType> lhs(lhs_value), rhs(rhs_value); 163613481Sgiacomo.travaglini@arm.com 163713481Sgiacomo.travaglini@arm.com if (lhs.AlmostEquals(rhs)) { 163813481Sgiacomo.travaglini@arm.com return AssertionSuccess(); 163913481Sgiacomo.travaglini@arm.com } 164013481Sgiacomo.travaglini@arm.com 164113481Sgiacomo.travaglini@arm.com ::std::stringstream lhs_ss; 164213481Sgiacomo.travaglini@arm.com lhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 164313481Sgiacomo.travaglini@arm.com << lhs_value; 164413481Sgiacomo.travaglini@arm.com 164513481Sgiacomo.travaglini@arm.com ::std::stringstream rhs_ss; 164613481Sgiacomo.travaglini@arm.com rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) 164713481Sgiacomo.travaglini@arm.com << rhs_value; 164813481Sgiacomo.travaglini@arm.com 164913481Sgiacomo.travaglini@arm.com return EqFailure(lhs_expression, 165013481Sgiacomo.travaglini@arm.com rhs_expression, 165113481Sgiacomo.travaglini@arm.com StringStreamToString(&lhs_ss), 165213481Sgiacomo.travaglini@arm.com StringStreamToString(&rhs_ss), 165313481Sgiacomo.travaglini@arm.com false); 165413481Sgiacomo.travaglini@arm.com} 165513481Sgiacomo.travaglini@arm.com 165613481Sgiacomo.travaglini@arm.com// Helper function for implementing ASSERT_NEAR. 165713481Sgiacomo.travaglini@arm.com// 165813481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. 165913481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1, 166013481Sgiacomo.travaglini@arm.com const char* expr2, 166113481Sgiacomo.travaglini@arm.com const char* abs_error_expr, 166213481Sgiacomo.travaglini@arm.com double val1, 166313481Sgiacomo.travaglini@arm.com double val2, 166413481Sgiacomo.travaglini@arm.com double abs_error); 166513481Sgiacomo.travaglini@arm.com 166613481Sgiacomo.travaglini@arm.com// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. 166713481Sgiacomo.travaglini@arm.com// A class that enables one to stream messages to assertion macros 166813481Sgiacomo.travaglini@arm.comclass GTEST_API_ AssertHelper { 166913481Sgiacomo.travaglini@arm.com public: 167013481Sgiacomo.travaglini@arm.com // Constructor. 167113481Sgiacomo.travaglini@arm.com AssertHelper(TestPartResult::Type type, 167213481Sgiacomo.travaglini@arm.com const char* file, 167313481Sgiacomo.travaglini@arm.com int line, 167413481Sgiacomo.travaglini@arm.com const char* message); 167513481Sgiacomo.travaglini@arm.com ~AssertHelper(); 167613481Sgiacomo.travaglini@arm.com 167713481Sgiacomo.travaglini@arm.com // Message assignment is a semantic trick to enable assertion 167813481Sgiacomo.travaglini@arm.com // streaming; see the GTEST_MESSAGE_ macro below. 167913481Sgiacomo.travaglini@arm.com void operator=(const Message& message) const; 168013481Sgiacomo.travaglini@arm.com 168113481Sgiacomo.travaglini@arm.com private: 168213481Sgiacomo.travaglini@arm.com // We put our data in a struct so that the size of the AssertHelper class can 168313481Sgiacomo.travaglini@arm.com // be as small as possible. This is important because gcc is incapable of 168413481Sgiacomo.travaglini@arm.com // re-using stack space even for temporary variables, so every EXPECT_EQ 168513481Sgiacomo.travaglini@arm.com // reserves stack space for another AssertHelper. 168613481Sgiacomo.travaglini@arm.com struct AssertHelperData { 168713481Sgiacomo.travaglini@arm.com AssertHelperData(TestPartResult::Type t, 168813481Sgiacomo.travaglini@arm.com const char* srcfile, 168913481Sgiacomo.travaglini@arm.com int line_num, 169013481Sgiacomo.travaglini@arm.com const char* msg) 169113481Sgiacomo.travaglini@arm.com : type(t), file(srcfile), line(line_num), message(msg) { } 169213481Sgiacomo.travaglini@arm.com 169313481Sgiacomo.travaglini@arm.com TestPartResult::Type const type; 169413481Sgiacomo.travaglini@arm.com const char* const file; 169513481Sgiacomo.travaglini@arm.com int const line; 169613481Sgiacomo.travaglini@arm.com std::string const message; 169713481Sgiacomo.travaglini@arm.com 169813481Sgiacomo.travaglini@arm.com private: 169913481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData); 170013481Sgiacomo.travaglini@arm.com }; 170113481Sgiacomo.travaglini@arm.com 170213481Sgiacomo.travaglini@arm.com AssertHelperData* const data_; 170313481Sgiacomo.travaglini@arm.com 170413481Sgiacomo.travaglini@arm.com GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper); 170513481Sgiacomo.travaglini@arm.com}; 170613481Sgiacomo.travaglini@arm.com 170713481Sgiacomo.travaglini@arm.com} // namespace internal 170813481Sgiacomo.travaglini@arm.com 170913481Sgiacomo.travaglini@arm.com#if GTEST_HAS_PARAM_TEST 171013481Sgiacomo.travaglini@arm.com// The pure interface class that all value-parameterized tests inherit from. 171113481Sgiacomo.travaglini@arm.com// A value-parameterized class must inherit from both ::testing::Test and 171213481Sgiacomo.travaglini@arm.com// ::testing::WithParamInterface. In most cases that just means inheriting 171313481Sgiacomo.travaglini@arm.com// from ::testing::TestWithParam, but more complicated test hierarchies 171413481Sgiacomo.travaglini@arm.com// may need to inherit from Test and WithParamInterface at different levels. 171513481Sgiacomo.travaglini@arm.com// 171613481Sgiacomo.travaglini@arm.com// This interface has support for accessing the test parameter value via 171713481Sgiacomo.travaglini@arm.com// the GetParam() method. 171813481Sgiacomo.travaglini@arm.com// 171913481Sgiacomo.travaglini@arm.com// Use it with one of the parameter generator defining functions, like Range(), 172013481Sgiacomo.travaglini@arm.com// Values(), ValuesIn(), Bool(), and Combine(). 172113481Sgiacomo.travaglini@arm.com// 172213481Sgiacomo.travaglini@arm.com// class FooTest : public ::testing::TestWithParam<int> { 172313481Sgiacomo.travaglini@arm.com// protected: 172413481Sgiacomo.travaglini@arm.com// FooTest() { 172513481Sgiacomo.travaglini@arm.com// // Can use GetParam() here. 172613481Sgiacomo.travaglini@arm.com// } 172713481Sgiacomo.travaglini@arm.com// virtual ~FooTest() { 172813481Sgiacomo.travaglini@arm.com// // Can use GetParam() here. 172913481Sgiacomo.travaglini@arm.com// } 173013481Sgiacomo.travaglini@arm.com// virtual void SetUp() { 173113481Sgiacomo.travaglini@arm.com// // Can use GetParam() here. 173213481Sgiacomo.travaglini@arm.com// } 173313481Sgiacomo.travaglini@arm.com// virtual void TearDown { 173413481Sgiacomo.travaglini@arm.com// // Can use GetParam() here. 173513481Sgiacomo.travaglini@arm.com// } 173613481Sgiacomo.travaglini@arm.com// }; 173713481Sgiacomo.travaglini@arm.com// TEST_P(FooTest, DoesBar) { 173813481Sgiacomo.travaglini@arm.com// // Can use GetParam() method here. 173913481Sgiacomo.travaglini@arm.com// Foo foo; 174013481Sgiacomo.travaglini@arm.com// ASSERT_TRUE(foo.DoesBar(GetParam())); 174113481Sgiacomo.travaglini@arm.com// } 174213481Sgiacomo.travaglini@arm.com// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10)); 174313481Sgiacomo.travaglini@arm.com 174413481Sgiacomo.travaglini@arm.comtemplate <typename T> 174513481Sgiacomo.travaglini@arm.comclass WithParamInterface { 174613481Sgiacomo.travaglini@arm.com public: 174713481Sgiacomo.travaglini@arm.com typedef T ParamType; 174813481Sgiacomo.travaglini@arm.com virtual ~WithParamInterface() {} 174913481Sgiacomo.travaglini@arm.com 175013481Sgiacomo.travaglini@arm.com // The current parameter value. Is also available in the test fixture's 175113481Sgiacomo.travaglini@arm.com // constructor. This member function is non-static, even though it only 175213481Sgiacomo.travaglini@arm.com // references static data, to reduce the opportunity for incorrect uses 175313481Sgiacomo.travaglini@arm.com // like writing 'WithParamInterface<bool>::GetParam()' for a test that 175413481Sgiacomo.travaglini@arm.com // uses a fixture whose parameter type is int. 175513481Sgiacomo.travaglini@arm.com const ParamType& GetParam() const { 175613481Sgiacomo.travaglini@arm.com GTEST_CHECK_(parameter_ != NULL) 175713481Sgiacomo.travaglini@arm.com << "GetParam() can only be called inside a value-parameterized test " 175813481Sgiacomo.travaglini@arm.com << "-- did you intend to write TEST_P instead of TEST_F?"; 175913481Sgiacomo.travaglini@arm.com return *parameter_; 176013481Sgiacomo.travaglini@arm.com } 176113481Sgiacomo.travaglini@arm.com 176213481Sgiacomo.travaglini@arm.com private: 176313481Sgiacomo.travaglini@arm.com // Sets parameter value. The caller is responsible for making sure the value 176413481Sgiacomo.travaglini@arm.com // remains alive and unchanged throughout the current test. 176513481Sgiacomo.travaglini@arm.com static void SetParam(const ParamType* parameter) { 176613481Sgiacomo.travaglini@arm.com parameter_ = parameter; 176713481Sgiacomo.travaglini@arm.com } 176813481Sgiacomo.travaglini@arm.com 176913481Sgiacomo.travaglini@arm.com // Static value used for accessing parameter during a test lifetime. 177013481Sgiacomo.travaglini@arm.com static const ParamType* parameter_; 177113481Sgiacomo.travaglini@arm.com 177213481Sgiacomo.travaglini@arm.com // TestClass must be a subclass of WithParamInterface<T> and Test. 177313481Sgiacomo.travaglini@arm.com template <class TestClass> friend class internal::ParameterizedTestFactory; 177413481Sgiacomo.travaglini@arm.com}; 177513481Sgiacomo.travaglini@arm.com 177613481Sgiacomo.travaglini@arm.comtemplate <typename T> 177713481Sgiacomo.travaglini@arm.comconst T* WithParamInterface<T>::parameter_ = NULL; 177813481Sgiacomo.travaglini@arm.com 177913481Sgiacomo.travaglini@arm.com// Most value-parameterized classes can ignore the existence of 178013481Sgiacomo.travaglini@arm.com// WithParamInterface, and can just inherit from ::testing::TestWithParam. 178113481Sgiacomo.travaglini@arm.com 178213481Sgiacomo.travaglini@arm.comtemplate <typename T> 178313481Sgiacomo.travaglini@arm.comclass TestWithParam : public Test, public WithParamInterface<T> { 178413481Sgiacomo.travaglini@arm.com}; 178513481Sgiacomo.travaglini@arm.com 178613481Sgiacomo.travaglini@arm.com#endif // GTEST_HAS_PARAM_TEST 178713481Sgiacomo.travaglini@arm.com 178813481Sgiacomo.travaglini@arm.com// Macros for indicating success/failure in test code. 178913481Sgiacomo.travaglini@arm.com 179013481Sgiacomo.travaglini@arm.com// ADD_FAILURE unconditionally adds a failure to the current test. 179113481Sgiacomo.travaglini@arm.com// SUCCEED generates a success - it doesn't automatically make the 179213481Sgiacomo.travaglini@arm.com// current test successful, as a test is only successful when it has 179313481Sgiacomo.travaglini@arm.com// no failure. 179413481Sgiacomo.travaglini@arm.com// 179513481Sgiacomo.travaglini@arm.com// EXPECT_* verifies that a certain condition is satisfied. If not, 179613481Sgiacomo.travaglini@arm.com// it behaves like ADD_FAILURE. In particular: 179713481Sgiacomo.travaglini@arm.com// 179813481Sgiacomo.travaglini@arm.com// EXPECT_TRUE verifies that a Boolean condition is true. 179913481Sgiacomo.travaglini@arm.com// EXPECT_FALSE verifies that a Boolean condition is false. 180013481Sgiacomo.travaglini@arm.com// 180113481Sgiacomo.travaglini@arm.com// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except 180213481Sgiacomo.travaglini@arm.com// that they will also abort the current function on failure. People 180313481Sgiacomo.travaglini@arm.com// usually want the fail-fast behavior of FAIL and ASSERT_*, but those 180413481Sgiacomo.travaglini@arm.com// writing data-driven tests often find themselves using ADD_FAILURE 180513481Sgiacomo.travaglini@arm.com// and EXPECT_* more. 180613481Sgiacomo.travaglini@arm.com 180713481Sgiacomo.travaglini@arm.com// Generates a nonfatal failure with a generic message. 180813481Sgiacomo.travaglini@arm.com#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed") 180913481Sgiacomo.travaglini@arm.com 181013481Sgiacomo.travaglini@arm.com// Generates a nonfatal failure at the given source file location with 181113481Sgiacomo.travaglini@arm.com// a generic message. 181213481Sgiacomo.travaglini@arm.com#define ADD_FAILURE_AT(file, line) \ 181313481Sgiacomo.travaglini@arm.com GTEST_MESSAGE_AT_(file, line, "Failed", \ 181413481Sgiacomo.travaglini@arm.com ::testing::TestPartResult::kNonFatalFailure) 181513481Sgiacomo.travaglini@arm.com 181613481Sgiacomo.travaglini@arm.com// Generates a fatal failure with a generic message. 181713481Sgiacomo.travaglini@arm.com#define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed") 181813481Sgiacomo.travaglini@arm.com 181913481Sgiacomo.travaglini@arm.com// Define this macro to 1 to omit the definition of FAIL(), which is a 182013481Sgiacomo.travaglini@arm.com// generic name and clashes with some other libraries. 182113481Sgiacomo.travaglini@arm.com#if !GTEST_DONT_DEFINE_FAIL 182213481Sgiacomo.travaglini@arm.com# define FAIL() GTEST_FAIL() 182313481Sgiacomo.travaglini@arm.com#endif 182413481Sgiacomo.travaglini@arm.com 182513481Sgiacomo.travaglini@arm.com// Generates a success with a generic message. 182613481Sgiacomo.travaglini@arm.com#define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded") 182713481Sgiacomo.travaglini@arm.com 182813481Sgiacomo.travaglini@arm.com// Define this macro to 1 to omit the definition of SUCCEED(), which 182913481Sgiacomo.travaglini@arm.com// is a generic name and clashes with some other libraries. 183013481Sgiacomo.travaglini@arm.com#if !GTEST_DONT_DEFINE_SUCCEED 183113481Sgiacomo.travaglini@arm.com# define SUCCEED() GTEST_SUCCEED() 183213481Sgiacomo.travaglini@arm.com#endif 183313481Sgiacomo.travaglini@arm.com 183413481Sgiacomo.travaglini@arm.com// Macros for testing exceptions. 183513481Sgiacomo.travaglini@arm.com// 183613481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_THROW(statement, expected_exception): 183713481Sgiacomo.travaglini@arm.com// Tests that the statement throws the expected exception. 183813481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_NO_THROW(statement): 183913481Sgiacomo.travaglini@arm.com// Tests that the statement doesn't throw any exception. 184013481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_ANY_THROW(statement): 184113481Sgiacomo.travaglini@arm.com// Tests that the statement throws an exception. 184213481Sgiacomo.travaglini@arm.com 184313481Sgiacomo.travaglini@arm.com#define EXPECT_THROW(statement, expected_exception) \ 184413481Sgiacomo.travaglini@arm.com GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_) 184513481Sgiacomo.travaglini@arm.com#define EXPECT_NO_THROW(statement) \ 184613481Sgiacomo.travaglini@arm.com GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_) 184713481Sgiacomo.travaglini@arm.com#define EXPECT_ANY_THROW(statement) \ 184813481Sgiacomo.travaglini@arm.com GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_) 184913481Sgiacomo.travaglini@arm.com#define ASSERT_THROW(statement, expected_exception) \ 185013481Sgiacomo.travaglini@arm.com GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_) 185113481Sgiacomo.travaglini@arm.com#define ASSERT_NO_THROW(statement) \ 185213481Sgiacomo.travaglini@arm.com GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_) 185313481Sgiacomo.travaglini@arm.com#define ASSERT_ANY_THROW(statement) \ 185413481Sgiacomo.travaglini@arm.com GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_) 185513481Sgiacomo.travaglini@arm.com 185613481Sgiacomo.travaglini@arm.com// Boolean assertions. Condition can be either a Boolean expression or an 185713481Sgiacomo.travaglini@arm.com// AssertionResult. For more information on how to use AssertionResult with 185813481Sgiacomo.travaglini@arm.com// these macros see comments on that class. 185913481Sgiacomo.travaglini@arm.com#define EXPECT_TRUE(condition) \ 186013481Sgiacomo.travaglini@arm.com GTEST_TEST_BOOLEAN_((condition), #condition, false, true, \ 186113481Sgiacomo.travaglini@arm.com GTEST_NONFATAL_FAILURE_) 186213481Sgiacomo.travaglini@arm.com#define EXPECT_FALSE(condition) \ 186313481Sgiacomo.travaglini@arm.com GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 186413481Sgiacomo.travaglini@arm.com GTEST_NONFATAL_FAILURE_) 186513481Sgiacomo.travaglini@arm.com#define ASSERT_TRUE(condition) \ 186613481Sgiacomo.travaglini@arm.com GTEST_TEST_BOOLEAN_((condition), #condition, false, true, \ 186713481Sgiacomo.travaglini@arm.com GTEST_FATAL_FAILURE_) 186813481Sgiacomo.travaglini@arm.com#define ASSERT_FALSE(condition) \ 186913481Sgiacomo.travaglini@arm.com GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \ 187013481Sgiacomo.travaglini@arm.com GTEST_FATAL_FAILURE_) 187113481Sgiacomo.travaglini@arm.com 187213481Sgiacomo.travaglini@arm.com// Includes the auto-generated header that implements a family of 187313481Sgiacomo.travaglini@arm.com// generic predicate assertion macros. 187413481Sgiacomo.travaglini@arm.com#include "gtest/gtest_pred_impl.h" 187513481Sgiacomo.travaglini@arm.com 187613481Sgiacomo.travaglini@arm.com// Macros for testing equalities and inequalities. 187713481Sgiacomo.travaglini@arm.com// 187813481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_EQ(v1, v2): Tests that v1 == v2 187913481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2 188013481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2 188113481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2 188213481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2 188313481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2 188413481Sgiacomo.travaglini@arm.com// 188513481Sgiacomo.travaglini@arm.com// When they are not, Google Test prints both the tested expressions and 188613481Sgiacomo.travaglini@arm.com// their actual values. The values must be compatible built-in types, 188713481Sgiacomo.travaglini@arm.com// or you will get a compiler error. By "compatible" we mean that the 188813481Sgiacomo.travaglini@arm.com// values can be compared by the respective operator. 188913481Sgiacomo.travaglini@arm.com// 189013481Sgiacomo.travaglini@arm.com// Note: 189113481Sgiacomo.travaglini@arm.com// 189213481Sgiacomo.travaglini@arm.com// 1. It is possible to make a user-defined type work with 189313481Sgiacomo.travaglini@arm.com// {ASSERT|EXPECT}_??(), but that requires overloading the 189413481Sgiacomo.travaglini@arm.com// comparison operators and is thus discouraged by the Google C++ 189513481Sgiacomo.travaglini@arm.com// Usage Guide. Therefore, you are advised to use the 189613481Sgiacomo.travaglini@arm.com// {ASSERT|EXPECT}_TRUE() macro to assert that two objects are 189713481Sgiacomo.travaglini@arm.com// equal. 189813481Sgiacomo.travaglini@arm.com// 189913481Sgiacomo.travaglini@arm.com// 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on 190013481Sgiacomo.travaglini@arm.com// pointers (in particular, C strings). Therefore, if you use it 190113481Sgiacomo.travaglini@arm.com// with two C strings, you are testing how their locations in memory 190213481Sgiacomo.travaglini@arm.com// are related, not how their content is related. To compare two C 190313481Sgiacomo.travaglini@arm.com// strings by content, use {ASSERT|EXPECT}_STR*(). 190413481Sgiacomo.travaglini@arm.com// 190513481Sgiacomo.travaglini@arm.com// 3. {ASSERT|EXPECT}_EQ(v1, v2) is preferred to 190613481Sgiacomo.travaglini@arm.com// {ASSERT|EXPECT}_TRUE(v1 == v2), as the former tells you 190713481Sgiacomo.travaglini@arm.com// what the actual value is when it fails, and similarly for the 190813481Sgiacomo.travaglini@arm.com// other comparisons. 190913481Sgiacomo.travaglini@arm.com// 191013481Sgiacomo.travaglini@arm.com// 4. Do not depend on the order in which {ASSERT|EXPECT}_??() 191113481Sgiacomo.travaglini@arm.com// evaluate their arguments, which is undefined. 191213481Sgiacomo.travaglini@arm.com// 191313481Sgiacomo.travaglini@arm.com// 5. These macros evaluate their arguments exactly once. 191413481Sgiacomo.travaglini@arm.com// 191513481Sgiacomo.travaglini@arm.com// Examples: 191613481Sgiacomo.travaglini@arm.com// 191713481Sgiacomo.travaglini@arm.com// EXPECT_NE(5, Foo()); 191813481Sgiacomo.travaglini@arm.com// EXPECT_EQ(NULL, a_pointer); 191913481Sgiacomo.travaglini@arm.com// ASSERT_LT(i, array_size); 192013481Sgiacomo.travaglini@arm.com// ASSERT_GT(records.size(), 0) << "There is no record left."; 192113481Sgiacomo.travaglini@arm.com 192213481Sgiacomo.travaglini@arm.com#define EXPECT_EQ(val1, val2) \ 192313481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal:: \ 192413481Sgiacomo.travaglini@arm.com EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \ 192513481Sgiacomo.travaglini@arm.com val1, val2) 192613481Sgiacomo.travaglini@arm.com#define EXPECT_NE(val1, val2) \ 192713481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 192813481Sgiacomo.travaglini@arm.com#define EXPECT_LE(val1, val2) \ 192913481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 193013481Sgiacomo.travaglini@arm.com#define EXPECT_LT(val1, val2) \ 193113481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 193213481Sgiacomo.travaglini@arm.com#define EXPECT_GE(val1, val2) \ 193313481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 193413481Sgiacomo.travaglini@arm.com#define EXPECT_GT(val1, val2) \ 193513481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 193613481Sgiacomo.travaglini@arm.com 193713481Sgiacomo.travaglini@arm.com#define GTEST_ASSERT_EQ(val1, val2) \ 193813481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal:: \ 193913481Sgiacomo.travaglini@arm.com EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, \ 194013481Sgiacomo.travaglini@arm.com val1, val2) 194113481Sgiacomo.travaglini@arm.com#define GTEST_ASSERT_NE(val1, val2) \ 194213481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2) 194313481Sgiacomo.travaglini@arm.com#define GTEST_ASSERT_LE(val1, val2) \ 194413481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2) 194513481Sgiacomo.travaglini@arm.com#define GTEST_ASSERT_LT(val1, val2) \ 194613481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2) 194713481Sgiacomo.travaglini@arm.com#define GTEST_ASSERT_GE(val1, val2) \ 194813481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2) 194913481Sgiacomo.travaglini@arm.com#define GTEST_ASSERT_GT(val1, val2) \ 195013481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2) 195113481Sgiacomo.travaglini@arm.com 195213481Sgiacomo.travaglini@arm.com// Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of 195313481Sgiacomo.travaglini@arm.com// ASSERT_XY(), which clashes with some users' own code. 195413481Sgiacomo.travaglini@arm.com 195513481Sgiacomo.travaglini@arm.com#if !GTEST_DONT_DEFINE_ASSERT_EQ 195613481Sgiacomo.travaglini@arm.com# define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2) 195713481Sgiacomo.travaglini@arm.com#endif 195813481Sgiacomo.travaglini@arm.com 195913481Sgiacomo.travaglini@arm.com#if !GTEST_DONT_DEFINE_ASSERT_NE 196013481Sgiacomo.travaglini@arm.com# define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2) 196113481Sgiacomo.travaglini@arm.com#endif 196213481Sgiacomo.travaglini@arm.com 196313481Sgiacomo.travaglini@arm.com#if !GTEST_DONT_DEFINE_ASSERT_LE 196413481Sgiacomo.travaglini@arm.com# define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2) 196513481Sgiacomo.travaglini@arm.com#endif 196613481Sgiacomo.travaglini@arm.com 196713481Sgiacomo.travaglini@arm.com#if !GTEST_DONT_DEFINE_ASSERT_LT 196813481Sgiacomo.travaglini@arm.com# define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2) 196913481Sgiacomo.travaglini@arm.com#endif 197013481Sgiacomo.travaglini@arm.com 197113481Sgiacomo.travaglini@arm.com#if !GTEST_DONT_DEFINE_ASSERT_GE 197213481Sgiacomo.travaglini@arm.com# define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2) 197313481Sgiacomo.travaglini@arm.com#endif 197413481Sgiacomo.travaglini@arm.com 197513481Sgiacomo.travaglini@arm.com#if !GTEST_DONT_DEFINE_ASSERT_GT 197613481Sgiacomo.travaglini@arm.com# define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2) 197713481Sgiacomo.travaglini@arm.com#endif 197813481Sgiacomo.travaglini@arm.com 197913481Sgiacomo.travaglini@arm.com// C-string Comparisons. All tests treat NULL and any non-NULL string 198013481Sgiacomo.travaglini@arm.com// as different. Two NULLs are equal. 198113481Sgiacomo.travaglini@arm.com// 198213481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2 198313481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2 198413481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case 198513481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case 198613481Sgiacomo.travaglini@arm.com// 198713481Sgiacomo.travaglini@arm.com// For wide or narrow string objects, you can use the 198813481Sgiacomo.travaglini@arm.com// {ASSERT|EXPECT}_??() macros. 198913481Sgiacomo.travaglini@arm.com// 199013481Sgiacomo.travaglini@arm.com// Don't depend on the order in which the arguments are evaluated, 199113481Sgiacomo.travaglini@arm.com// which is undefined. 199213481Sgiacomo.travaglini@arm.com// 199313481Sgiacomo.travaglini@arm.com// These macros evaluate their arguments exactly once. 199413481Sgiacomo.travaglini@arm.com 199513481Sgiacomo.travaglini@arm.com#define EXPECT_STREQ(s1, s2) \ 199613481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2) 199713481Sgiacomo.travaglini@arm.com#define EXPECT_STRNE(s1, s2) \ 199813481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 199913481Sgiacomo.travaglini@arm.com#define EXPECT_STRCASEEQ(s1, s2) \ 200013481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2) 200113481Sgiacomo.travaglini@arm.com#define EXPECT_STRCASENE(s1, s2)\ 200213481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 200313481Sgiacomo.travaglini@arm.com 200413481Sgiacomo.travaglini@arm.com#define ASSERT_STREQ(s1, s2) \ 200513481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2) 200613481Sgiacomo.travaglini@arm.com#define ASSERT_STRNE(s1, s2) \ 200713481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2) 200813481Sgiacomo.travaglini@arm.com#define ASSERT_STRCASEEQ(s1, s2) \ 200913481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2) 201013481Sgiacomo.travaglini@arm.com#define ASSERT_STRCASENE(s1, s2)\ 201113481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2) 201213481Sgiacomo.travaglini@arm.com 201313481Sgiacomo.travaglini@arm.com// Macros for comparing floating-point numbers. 201413481Sgiacomo.travaglini@arm.com// 201513481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_FLOAT_EQ(val1, val2): 201613481Sgiacomo.travaglini@arm.com// Tests that two float values are almost equal. 201713481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_DOUBLE_EQ(val1, val2): 201813481Sgiacomo.travaglini@arm.com// Tests that two double values are almost equal. 201913481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error): 202013481Sgiacomo.travaglini@arm.com// Tests that v1 and v2 are within the given distance to each other. 202113481Sgiacomo.travaglini@arm.com// 202213481Sgiacomo.travaglini@arm.com// Google Test uses ULP-based comparison to automatically pick a default 202313481Sgiacomo.travaglini@arm.com// error bound that is appropriate for the operands. See the 202413481Sgiacomo.travaglini@arm.com// FloatingPoint template class in gtest-internal.h if you are 202513481Sgiacomo.travaglini@arm.com// interested in the implementation details. 202613481Sgiacomo.travaglini@arm.com 202713481Sgiacomo.travaglini@arm.com#define EXPECT_FLOAT_EQ(val1, val2)\ 202813481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 202913481Sgiacomo.travaglini@arm.com val1, val2) 203013481Sgiacomo.travaglini@arm.com 203113481Sgiacomo.travaglini@arm.com#define EXPECT_DOUBLE_EQ(val1, val2)\ 203213481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 203313481Sgiacomo.travaglini@arm.com val1, val2) 203413481Sgiacomo.travaglini@arm.com 203513481Sgiacomo.travaglini@arm.com#define ASSERT_FLOAT_EQ(val1, val2)\ 203613481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \ 203713481Sgiacomo.travaglini@arm.com val1, val2) 203813481Sgiacomo.travaglini@arm.com 203913481Sgiacomo.travaglini@arm.com#define ASSERT_DOUBLE_EQ(val1, val2)\ 204013481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \ 204113481Sgiacomo.travaglini@arm.com val1, val2) 204213481Sgiacomo.travaglini@arm.com 204313481Sgiacomo.travaglini@arm.com#define EXPECT_NEAR(val1, val2, abs_error)\ 204413481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 204513481Sgiacomo.travaglini@arm.com val1, val2, abs_error) 204613481Sgiacomo.travaglini@arm.com 204713481Sgiacomo.travaglini@arm.com#define ASSERT_NEAR(val1, val2, abs_error)\ 204813481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \ 204913481Sgiacomo.travaglini@arm.com val1, val2, abs_error) 205013481Sgiacomo.travaglini@arm.com 205113481Sgiacomo.travaglini@arm.com// These predicate format functions work on floating-point values, and 205213481Sgiacomo.travaglini@arm.com// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g. 205313481Sgiacomo.travaglini@arm.com// 205413481Sgiacomo.travaglini@arm.com// EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0); 205513481Sgiacomo.travaglini@arm.com 205613481Sgiacomo.travaglini@arm.com// Asserts that val1 is less than, or almost equal to, val2. Fails 205713481Sgiacomo.travaglini@arm.com// otherwise. In particular, it fails if either val1 or val2 is NaN. 205813481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2, 205913481Sgiacomo.travaglini@arm.com float val1, float val2); 206013481Sgiacomo.travaglini@arm.comGTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2, 206113481Sgiacomo.travaglini@arm.com double val1, double val2); 206213481Sgiacomo.travaglini@arm.com 206313481Sgiacomo.travaglini@arm.com 206413481Sgiacomo.travaglini@arm.com#if GTEST_OS_WINDOWS 206513481Sgiacomo.travaglini@arm.com 206613481Sgiacomo.travaglini@arm.com// Macros that test for HRESULT failure and success, these are only useful 206713481Sgiacomo.travaglini@arm.com// on Windows, and rely on Windows SDK macros and APIs to compile. 206813481Sgiacomo.travaglini@arm.com// 206913481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr) 207013481Sgiacomo.travaglini@arm.com// 207113481Sgiacomo.travaglini@arm.com// When expr unexpectedly fails or succeeds, Google Test prints the 207213481Sgiacomo.travaglini@arm.com// expected result and the actual result with both a human-readable 207313481Sgiacomo.travaglini@arm.com// string representation of the error, if available, as well as the 207413481Sgiacomo.travaglini@arm.com// hex result code. 207513481Sgiacomo.travaglini@arm.com# define EXPECT_HRESULT_SUCCEEDED(expr) \ 207613481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 207713481Sgiacomo.travaglini@arm.com 207813481Sgiacomo.travaglini@arm.com# define ASSERT_HRESULT_SUCCEEDED(expr) \ 207913481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr)) 208013481Sgiacomo.travaglini@arm.com 208113481Sgiacomo.travaglini@arm.com# define EXPECT_HRESULT_FAILED(expr) \ 208213481Sgiacomo.travaglini@arm.com EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 208313481Sgiacomo.travaglini@arm.com 208413481Sgiacomo.travaglini@arm.com# define ASSERT_HRESULT_FAILED(expr) \ 208513481Sgiacomo.travaglini@arm.com ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr)) 208613481Sgiacomo.travaglini@arm.com 208713481Sgiacomo.travaglini@arm.com#endif // GTEST_OS_WINDOWS 208813481Sgiacomo.travaglini@arm.com 208913481Sgiacomo.travaglini@arm.com// Macros that execute statement and check that it doesn't generate new fatal 209013481Sgiacomo.travaglini@arm.com// failures in the current thread. 209113481Sgiacomo.travaglini@arm.com// 209213481Sgiacomo.travaglini@arm.com// * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement); 209313481Sgiacomo.travaglini@arm.com// 209413481Sgiacomo.travaglini@arm.com// Examples: 209513481Sgiacomo.travaglini@arm.com// 209613481Sgiacomo.travaglini@arm.com// EXPECT_NO_FATAL_FAILURE(Process()); 209713481Sgiacomo.travaglini@arm.com// ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed"; 209813481Sgiacomo.travaglini@arm.com// 209913481Sgiacomo.travaglini@arm.com#define ASSERT_NO_FATAL_FAILURE(statement) \ 210013481Sgiacomo.travaglini@arm.com GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_) 210113481Sgiacomo.travaglini@arm.com#define EXPECT_NO_FATAL_FAILURE(statement) \ 210213481Sgiacomo.travaglini@arm.com GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_) 210313481Sgiacomo.travaglini@arm.com 210413481Sgiacomo.travaglini@arm.com// Causes a trace (including the source file path, the current line 210513481Sgiacomo.travaglini@arm.com// number, and the given message) to be included in every test failure 210613481Sgiacomo.travaglini@arm.com// message generated by code in the current scope. The effect is 210713481Sgiacomo.travaglini@arm.com// undone when the control leaves the current scope. 210813481Sgiacomo.travaglini@arm.com// 210913481Sgiacomo.travaglini@arm.com// The message argument can be anything streamable to std::ostream. 211013481Sgiacomo.travaglini@arm.com// 211113481Sgiacomo.travaglini@arm.com// In the implementation, we include the current line number as part 211213481Sgiacomo.travaglini@arm.com// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s 211313481Sgiacomo.travaglini@arm.com// to appear in the same block - as long as they are on different 211413481Sgiacomo.travaglini@arm.com// lines. 211513481Sgiacomo.travaglini@arm.com#define SCOPED_TRACE(message) \ 211613481Sgiacomo.travaglini@arm.com ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\ 211713481Sgiacomo.travaglini@arm.com __FILE__, __LINE__, ::testing::Message() << (message)) 211813481Sgiacomo.travaglini@arm.com 211913481Sgiacomo.travaglini@arm.com// Compile-time assertion for type equality. 212013481Sgiacomo.travaglini@arm.com// StaticAssertTypeEq<type1, type2>() compiles iff type1 and type2 are 212113481Sgiacomo.travaglini@arm.com// the same type. The value it returns is not interesting. 212213481Sgiacomo.travaglini@arm.com// 212313481Sgiacomo.travaglini@arm.com// Instead of making StaticAssertTypeEq a class template, we make it a 212413481Sgiacomo.travaglini@arm.com// function template that invokes a helper class template. This 212513481Sgiacomo.travaglini@arm.com// prevents a user from misusing StaticAssertTypeEq<T1, T2> by 212613481Sgiacomo.travaglini@arm.com// defining objects of that type. 212713481Sgiacomo.travaglini@arm.com// 212813481Sgiacomo.travaglini@arm.com// CAVEAT: 212913481Sgiacomo.travaglini@arm.com// 213013481Sgiacomo.travaglini@arm.com// When used inside a method of a class template, 213113481Sgiacomo.travaglini@arm.com// StaticAssertTypeEq<T1, T2>() is effective ONLY IF the method is 213213481Sgiacomo.travaglini@arm.com// instantiated. For example, given: 213313481Sgiacomo.travaglini@arm.com// 213413481Sgiacomo.travaglini@arm.com// template <typename T> class Foo { 213513481Sgiacomo.travaglini@arm.com// public: 213613481Sgiacomo.travaglini@arm.com// void Bar() { testing::StaticAssertTypeEq<int, T>(); } 213713481Sgiacomo.travaglini@arm.com// }; 213813481Sgiacomo.travaglini@arm.com// 213913481Sgiacomo.travaglini@arm.com// the code: 214013481Sgiacomo.travaglini@arm.com// 214113481Sgiacomo.travaglini@arm.com// void Test1() { Foo<bool> foo; } 214213481Sgiacomo.travaglini@arm.com// 214313481Sgiacomo.travaglini@arm.com// will NOT generate a compiler error, as Foo<bool>::Bar() is never 214413481Sgiacomo.travaglini@arm.com// actually instantiated. Instead, you need: 214513481Sgiacomo.travaglini@arm.com// 214613481Sgiacomo.travaglini@arm.com// void Test2() { Foo<bool> foo; foo.Bar(); } 214713481Sgiacomo.travaglini@arm.com// 214813481Sgiacomo.travaglini@arm.com// to cause a compiler error. 214913481Sgiacomo.travaglini@arm.comtemplate <typename T1, typename T2> 215013481Sgiacomo.travaglini@arm.combool StaticAssertTypeEq() { 215113481Sgiacomo.travaglini@arm.com (void)internal::StaticAssertTypeEqHelper<T1, T2>(); 215213481Sgiacomo.travaglini@arm.com return true; 215313481Sgiacomo.travaglini@arm.com} 215413481Sgiacomo.travaglini@arm.com 215513481Sgiacomo.travaglini@arm.com// Defines a test. 215613481Sgiacomo.travaglini@arm.com// 215713481Sgiacomo.travaglini@arm.com// The first parameter is the name of the test case, and the second 215813481Sgiacomo.travaglini@arm.com// parameter is the name of the test within the test case. 215913481Sgiacomo.travaglini@arm.com// 216013481Sgiacomo.travaglini@arm.com// The convention is to end the test case name with "Test". For 216113481Sgiacomo.travaglini@arm.com// example, a test case for the Foo class can be named FooTest. 216213481Sgiacomo.travaglini@arm.com// 216313481Sgiacomo.travaglini@arm.com// Test code should appear between braces after an invocation of 216413481Sgiacomo.travaglini@arm.com// this macro. Example: 216513481Sgiacomo.travaglini@arm.com// 216613481Sgiacomo.travaglini@arm.com// TEST(FooTest, InitializesCorrectly) { 216713481Sgiacomo.travaglini@arm.com// Foo foo; 216813481Sgiacomo.travaglini@arm.com// EXPECT_TRUE(foo.StatusIsOK()); 216913481Sgiacomo.travaglini@arm.com// } 217013481Sgiacomo.travaglini@arm.com 217113481Sgiacomo.travaglini@arm.com// Note that we call GetTestTypeId() instead of GetTypeId< 217213481Sgiacomo.travaglini@arm.com// ::testing::Test>() here to get the type ID of testing::Test. This 217313481Sgiacomo.travaglini@arm.com// is to work around a suspected linker bug when using Google Test as 217413481Sgiacomo.travaglini@arm.com// a framework on Mac OS X. The bug causes GetTypeId< 217513481Sgiacomo.travaglini@arm.com// ::testing::Test>() to return different values depending on whether 217613481Sgiacomo.travaglini@arm.com// the call is from the Google Test framework itself or from user test 217713481Sgiacomo.travaglini@arm.com// code. GetTestTypeId() is guaranteed to always return the same 217813481Sgiacomo.travaglini@arm.com// value, as it always calls GetTypeId<>() from the Google Test 217913481Sgiacomo.travaglini@arm.com// framework. 218013481Sgiacomo.travaglini@arm.com#define GTEST_TEST(test_case_name, test_name)\ 218113481Sgiacomo.travaglini@arm.com GTEST_TEST_(test_case_name, test_name, \ 218213481Sgiacomo.travaglini@arm.com ::testing::Test, ::testing::internal::GetTestTypeId()) 218313481Sgiacomo.travaglini@arm.com 218413481Sgiacomo.travaglini@arm.com// Define this macro to 1 to omit the definition of TEST(), which 218513481Sgiacomo.travaglini@arm.com// is a generic name and clashes with some other libraries. 218613481Sgiacomo.travaglini@arm.com#if !GTEST_DONT_DEFINE_TEST 218713481Sgiacomo.travaglini@arm.com# define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name) 218813481Sgiacomo.travaglini@arm.com#endif 218913481Sgiacomo.travaglini@arm.com 219013481Sgiacomo.travaglini@arm.com// Defines a test that uses a test fixture. 219113481Sgiacomo.travaglini@arm.com// 219213481Sgiacomo.travaglini@arm.com// The first parameter is the name of the test fixture class, which 219313481Sgiacomo.travaglini@arm.com// also doubles as the test case name. The second parameter is the 219413481Sgiacomo.travaglini@arm.com// name of the test within the test case. 219513481Sgiacomo.travaglini@arm.com// 219613481Sgiacomo.travaglini@arm.com// A test fixture class must be declared earlier. The user should put 219713481Sgiacomo.travaglini@arm.com// his test code between braces after using this macro. Example: 219813481Sgiacomo.travaglini@arm.com// 219913481Sgiacomo.travaglini@arm.com// class FooTest : public testing::Test { 220013481Sgiacomo.travaglini@arm.com// protected: 220113481Sgiacomo.travaglini@arm.com// virtual void SetUp() { b_.AddElement(3); } 220213481Sgiacomo.travaglini@arm.com// 220313481Sgiacomo.travaglini@arm.com// Foo a_; 220413481Sgiacomo.travaglini@arm.com// Foo b_; 220513481Sgiacomo.travaglini@arm.com// }; 220613481Sgiacomo.travaglini@arm.com// 220713481Sgiacomo.travaglini@arm.com// TEST_F(FooTest, InitializesCorrectly) { 220813481Sgiacomo.travaglini@arm.com// EXPECT_TRUE(a_.StatusIsOK()); 220913481Sgiacomo.travaglini@arm.com// } 221013481Sgiacomo.travaglini@arm.com// 221113481Sgiacomo.travaglini@arm.com// TEST_F(FooTest, ReturnsElementCountCorrectly) { 221213481Sgiacomo.travaglini@arm.com// EXPECT_EQ(0, a_.size()); 221313481Sgiacomo.travaglini@arm.com// EXPECT_EQ(1, b_.size()); 221413481Sgiacomo.travaglini@arm.com// } 221513481Sgiacomo.travaglini@arm.com 221613481Sgiacomo.travaglini@arm.com#define TEST_F(test_fixture, test_name)\ 221713481Sgiacomo.travaglini@arm.com GTEST_TEST_(test_fixture, test_name, test_fixture, \ 221813481Sgiacomo.travaglini@arm.com ::testing::internal::GetTypeId<test_fixture>()) 221913481Sgiacomo.travaglini@arm.com 222013481Sgiacomo.travaglini@arm.com} // namespace testing 222113481Sgiacomo.travaglini@arm.com 222213481Sgiacomo.travaglini@arm.com// Use this function in main() to run all tests. It returns 0 if all 222313481Sgiacomo.travaglini@arm.com// tests are successful, or 1 otherwise. 222413481Sgiacomo.travaglini@arm.com// 222513481Sgiacomo.travaglini@arm.com// RUN_ALL_TESTS() should be invoked after the command line has been 222613481Sgiacomo.travaglini@arm.com// parsed by InitGoogleTest(). 222713481Sgiacomo.travaglini@arm.com// 222813481Sgiacomo.travaglini@arm.com// This function was formerly a macro; thus, it is in the global 222913481Sgiacomo.travaglini@arm.com// namespace and has an all-caps name. 223013481Sgiacomo.travaglini@arm.comint RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_; 223113481Sgiacomo.travaglini@arm.com 223213481Sgiacomo.travaglini@arm.cominline int RUN_ALL_TESTS() { 223313481Sgiacomo.travaglini@arm.com return ::testing::UnitTest::GetInstance()->Run(); 223413481Sgiacomo.travaglini@arm.com} 223513481Sgiacomo.travaglini@arm.com 223613481Sgiacomo.travaglini@arm.com#endif // GTEST_INCLUDE_GTEST_GTEST_H_ 2237