gtest-port.h revision 84190c7c1f1b899ad83fdd8e110bde08ad281534
11be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Copyright 2005, Google Inc. 21be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// All rights reserved. 31be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 41be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Redistribution and use in source and binary forms, with or without 51be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// modification, are permitted provided that the following conditions are 61be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// met: 71be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 81be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Redistributions of source code must retain the above copyright 91be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// notice, this list of conditions and the following disclaimer. 101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Redistributions in binary form must reproduce the above 111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// copyright notice, this list of conditions and the following disclaimer 121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// in the documentation and/or other materials provided with the 131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// distribution. 141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// * Neither the name of Google Inc. nor the names of its 151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// contributors may be used to endorse or promote products derived from 161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// this software without specific prior written permission. 171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Authors: wan@google.com (Zhanyong Wan) 311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Low-level types and utilities for porting Google Test to various 331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// platforms. They are subject to change without notice. DO NOT USE 341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// THEM IN USER CODE. 351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The user can define the following macros in the build script to 401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// control Google Test's behavior. If the user doesn't define a macro 411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// in this list, Google Test will define it. 421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_CLONE - Define it to 1/0 to indicate that clone(2) 441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is/isn't available. 451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_GLOBAL_STRING - Define it to 1/0 to indicate that ::string 461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is/isn't available (some systems define 471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ::string, which is different to std::string). 481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::string 491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is/isn't available (some systems define 501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ::wstring, which is different to std::wstring). 511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_PTHREAD - Define it to 1/0 to indicate that <pthread.h> 521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is/isn't available. 531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_RTTI - Define it to 1/0 to indicate that RTTI is/isn't 541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// enabled. 551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_STD_STRING - Define it to 1/0 to indicate that 561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// std::string does/doesn't work (Google Test can 571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// be used where std::string is unavailable). 581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_STD_WSTRING - Define it to 1/0 to indicate that 591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// std::wstring does/doesn't work (Google Test can 601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// be used where std::wstring is unavailable). 611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_TR1_TUPLE 1 - Define it to 1/0 to indicate tr1::tuple 621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is/isn't available. 631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This header defines the following utilities: 651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Macros indicating the current platform (defined to 1 if compiled on 671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// the given platform; otherwise undefined): 68f6071db8c6f4192253a3c544379ad35dcb64dab0Nicolas Catania// GTEST_OS_ANDROID - Android 691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_OS_CYGWIN - Cygwin 701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_OS_LINUX - Linux 711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_OS_MAC - Mac OS X 721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_OS_SOLARIS - Sun Solaris 731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_OS_SYMBIAN - Symbian 741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_OS_WINDOWS - Windows 751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_OS_ZOS - z/OS 761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Among the platforms, Cygwin, Linux, Max OS X, and Windows have the 781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// most stable support. Since core members of the Google Test project 791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// don't have access to other platforms, support for them may be less 801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// stable. If you notice any problems on your platform, please notify 811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// googletestframework@googlegroups.com (patches for fixing them are 821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// even more welcome!). 831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Note that it is possible that none of the GTEST_OS_* macros are defined. 851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Macros indicating available Google Test features (defined to 1 if 871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// the corresponding feature is supported; otherwise undefined): 881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_COMBINE - the Combine() function (for value-parameterized 891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// tests) 901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_DEATH_TEST - death tests 911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_PARAM_TEST - value-parameterized tests 921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_TYPED_TEST - typed tests 931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_TYPED_TEST_P - type-parameterized tests 941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_USES_POSIX_RE - enhanced POSIX regex is used. 951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_USES_SIMPLE_RE - our own simple regex is used; 961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// the above two are mutually exclusive. 971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Macros for basic C++ coding: 991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning. 1001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_ATTRIBUTE_UNUSED_ - declares that a class' instances don't have to 1011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// be used. 1021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=. 1031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_MUST_USE_RESULT_ - declares that a function's result must be used. 1041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 1051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Synchronization: 1061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Mutex, MutexLock, ThreadLocal, GetThreadCount() 1071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// - synchronization primitives. 1081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_IS_THREADSAFE - defined to 1 to indicate that the above 1091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// synchronization primitives have real implementations 1101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// and Google Test is thread-safe; or 0 otherwise. 1111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 1121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Template meta programming: 1131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is_pointer - as in TR1; needed on Symbian and IBM XL C/C++ only. 1141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 1151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Smart pointers: 1161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// scoped_ptr - as in TR2. 1171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 1181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Regular expressions: 1191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// RE - a simple regular expression class using the POSIX 1201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Extended Regular Expression syntax. Not available on 1211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Windows. 1221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 1231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Logging: 1241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_LOG_() - logs messages at the specified severity level. 1251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LogToStderr() - directs all log messages to stderr. 1261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// FlushInfoLog() - flushes informational log messages. 1271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 1281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Stderr capturing: 1291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// CaptureStderr() - starts capturing stderr. 1301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GetCapturedStderr() - stops capturing stderr and returns the captured 1311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// string. 1321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 1331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Integer types: 1341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// TypeWithSize - maps an integer to a int type. 1351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Int32, UInt32, Int64, UInt64, TimeInMillis 1361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// - integers of known sizes. 1371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// BiggestInt - the biggest signed integer type. 1381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 1391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Command-line utilities: 1401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_FLAG() - references a flag. 1411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_DECLARE_*() - declares a flag. 1421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_DEFINE_*() - defines a flag. 1431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GetArgvs() - returns the command line as a vector of strings. 1441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 1451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Environment variable utilities: 1461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GetEnv() - gets the value of an environment variable. 1471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// BoolFromGTestEnv() - parses a bool environment variable. 1481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Int32FromGTestEnv() - parses an Int32 environment variable. 1491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// StringFromGTestEnv() - parses a string environment variable. 1501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <stdlib.h> 1521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <stdio.h> 1531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <iostream> // Used for GTEST_CHECK_ 1541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" 1561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_FLAG_PREFIX_ "gtest_" 1571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" 1581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_NAME_ "Google Test" 1591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/" 1601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines the version of gcc that is used to compile this. 1621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifdef __GNUC__ 1631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 40302 means version 4.3.2. 1641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_GCC_VER_ \ 1651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) 1661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // __GNUC__ 1671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines the platform on which Google Test is compiled. 1691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifdef __CYGWIN__ 1701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_OS_CYGWIN 1 1711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#elif __SYMBIAN32__ 1721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_OS_SYMBIAN 1 1731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#elif defined _MSC_VER 1741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// TODO(kenton@google.com): GTEST_OS_WINDOWS is currently used to mean 1751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// both "The OS is Windows" and "The compiler is MSVC". These 1761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// meanings really should be separated in order to better support 1771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Windows compilers other than MSVC. 1781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_OS_WINDOWS 1 1791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#elif defined __APPLE__ 1801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_OS_MAC 1 181f6071db8c6f4192253a3c544379ad35dcb64dab0Nicolas Catania#elif defined ANDROID 182f6071db8c6f4192253a3c544379ad35dcb64dab0Nicolas Catania#define GTEST_OS_ANDROID 1 1831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#elif defined __linux__ 1841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_OS_LINUX 1 1851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#elif defined __MVS__ 1861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_OS_ZOS 1 1871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#elif defined(__sun) && defined(__SVR4) 1881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_OS_SOLARIS 1 1891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // _MSC_VER 1901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_OS_CYGWIN || GTEST_OS_LINUX || GTEST_OS_MAC 1921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 1931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// On some platforms, <regex.h> needs someone to define size_t, and 1941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// won't compile otherwise. We can #include it here as we already 1951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// included <stdlib.h>, which is guaranteed to define size_t through 1961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// <stddef.h>. 1971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <regex.h> // NOLINT 1981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_USES_POSIX_RE 1 1991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 2011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// <regex.h> may not be available on this platform. Use our own 2031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// simple regex implementation instead. 2041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_USES_SIMPLE_RE 1 2051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_OS_CYGWIN || GTEST_OS_LINUX || GTEST_OS_MAC 2071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Defines GTEST_HAS_EXCEPTIONS to 1 if exceptions are enabled, or 0 2091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// otherwise. 2101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifdef _MSC_VER // Compiled by MSVC? 2121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Assumes that exceptions are enabled by default. 2131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef _HAS_EXCEPTIONS // MSVC uses this macro to enable exceptions. 2141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define _HAS_EXCEPTIONS 1 2151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // _HAS_EXCEPTIONS 2161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS 2171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else // The compiler is not MSVC. 2181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// gcc defines __EXCEPTIONS to 1 iff exceptions are enabled. For 2191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// other compilers, we assume exceptions are disabled to be 2201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// conservative. 2211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if defined(__GNUC__) && __EXCEPTIONS 2221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_EXCEPTIONS 1 2231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 2241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_EXCEPTIONS 0 2251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // defined(__GNUC__) && __EXCEPTIONS 2261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // _MSC_VER 2271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines whether ::std::string and ::string are available. 2291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_HAS_STD_STRING 2311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The user didn't tell us whether ::std::string is available, so we 2321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// need to figure it out. The only environment that we know 2331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ::std::string is not available is MSVC 7.1 or lower with exceptions 2341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// disabled. 2351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if defined(_MSC_VER) && (_MSC_VER < 1400) && !GTEST_HAS_EXCEPTIONS 2361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_STD_STRING 0 2371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 2381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_STD_STRING 1 2391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif 2401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_STRING 2411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_HAS_GLOBAL_STRING 2431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The user didn't tell us whether ::string is available, so we need 2441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// to figure it out. 2451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_GLOBAL_STRING 0 2471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_GLOBAL_STRING 2491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_HAS_STD_WSTRING 2511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The user didn't tell us whether ::std::wstring is available, so we need 2521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// to figure it out. 2531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// TODO(wan@google.com): uses autoconf to detect whether ::std::wstring 2541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is available. 2551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 256f6071db8c6f4192253a3c544379ad35dcb64dab0Nicolas Catania#if GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || GTEST_OS_ANDROID 2571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Cygwin 1.5 and below doesn't support ::std::wstring. 2581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Cygwin 1.7 might add wstring support; this should be updated when clear. 2591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Solaris' libc++ doesn't support it either. 260f6071db8c6f4192253a3c544379ad35dcb64dab0Nicolas Catania// Android does not support wstring and never will. 2611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_STD_WSTRING 0 2621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 2631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_STD_WSTRING GTEST_HAS_STD_STRING 2641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_OS_CYGWIN || GTEST_OS_SOLARIS 2651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_WSTRING 2671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_HAS_GLOBAL_WSTRING 2691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The user didn't tell us whether ::wstring is available, so we need 2701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// to figure it out. 2711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_GLOBAL_WSTRING \ 2721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING) 2731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_GLOBAL_WSTRING 2741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_STD_STRING || GTEST_HAS_GLOBAL_STRING || \ 2761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING 2771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <string> // NOLINT 2781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_STRING || GTEST_HAS_GLOBAL_STRING || 2791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING 2801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_STD_STRING 2821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <sstream> // NOLINT 2831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 2841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <strstream> // NOLINT 2851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_STRING 2861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines whether RTTI is available. 2881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_HAS_RTTI 2891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The user didn't tell us whether RTTI is enabled, so we need to 2901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// figure it out. 2911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifdef _MSC_VER 2931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 2941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled. 2951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_RTTI 1 2961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 2971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_RTTI 0 2981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // _CPPRTTI 2991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#elif defined(__GNUC__) 3011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 30284190c7c1f1b899ad83fdd8e110bde08ad281534Nicolas Catania// Android uses GCC but does not support RTTI 30384190c7c1f1b899ad83fdd8e110bde08ad281534Nicolas Catania#if GTEST_OS_ANDROID 30484190c7c1f1b899ad83fdd8e110bde08ad281534Nicolas Catania#define GTEST_HAS_RTTI 0 30584190c7c1f1b899ad83fdd8e110bde08ad281534Nicolas Catania#else 3061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled. 3071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_GCC_VER_ >= 40302 3081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifdef __GXX_RTTI 3091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_RTTI 1 3101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 3111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_RTTI 0 3121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // __GXX_RTTI 3131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 3141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// For gcc versions smaller than 4.3.2, we assume RTTI is enabled. 3151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_RTTI 1 3161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_GCC_VER >= 40302 31784190c7c1f1b899ad83fdd8e110bde08ad281534Nicolas Catania#endif // GTEST_OS_ANDROID 3181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 3201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Unknown compiler - assume RTTI is enabled. 3221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_RTTI 1 3231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // _MSC_VER 3251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_RTTI 3271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines whether <pthread.h> is available. 3291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_HAS_PTHREAD 3301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The user didn't tell us, so we need to figure it out. 3311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC) 3321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_PTHREAD 3331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines whether tr1/tuple is available. If you have tr1/tuple 3351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// on your platform, define GTEST_HAS_TR1_TUPLE=1 for both the Google 3361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Test project and your tests. If you would like Google Test to detect 3371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// tr1/tuple on your platform automatically, please open an issue 3381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ticket at http://code.google.com/p/googletest. 3391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_HAS_TR1_TUPLE 3401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The user didn't tell us, so we need to figure it out. 3411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GCC provides <tr1/tuple> since 4.0.0. 3433f9bef5994073d5f7e91e638ab000821ea0f7628Nicolas Catania#if defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000) && !GTEST_OS_ANDROID 3441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_TR1_TUPLE 1 3451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 3461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_TR1_TUPLE 0 3471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // __GNUC__ 3481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_TR1_TUPLE 3491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// To avoid conditional compilation everywhere, we make it 3511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// gtest-port.h's responsibility to #include the header implementing 3521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// tr1/tuple. 3531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_TR1_TUPLE 3541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if defined(__GNUC__) 3551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GCC implements tr1/tuple in the <tr1/tuple> header. This does not 3561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// conform to the TR1 spec, which requires the header to be <tuple>. 3571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <tr1/tuple> 3581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 3591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// If the compiler is not GCC, we assume the user is using a 3601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// spec-conforming TR1 implementation. 3611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <tuple> 3621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // __GNUC__ 3631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_TR1_TUPLE 3641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines whether clone(2) is supported. 3661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Usually it will only be available on Linux, excluding 3671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Linux on the Itanium architecture. 3681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Also see http://linux.die.net/man/2/clone. 3691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifndef GTEST_HAS_CLONE 3701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The user didn't tell us, so we need to figure it out. 3711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_OS_LINUX && !defined(__ia64__) 3731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_CLONE 1 3741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 3751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_CLONE 0 3761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_OS_LINUX && !defined(__ia64__) 3771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_CLONE 3791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines whether to support death tests. 3811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Google Test does not support death tests for VC 7.1 and earlier for 3821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// these reasons: 3831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 1. std::vector does not build in VC 7.1 when exceptions are disabled. 3841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 2. std::string does not build in VC 7.1 when exceptions are disabled 3851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// (this is covered by GTEST_HAS_STD_STRING guard). 3861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 3. abort() in a VC 7.1 application compiled as GUI in debug config 3871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// pops up a dialog window that cannot be suppressed programmatically. 3881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_STD_STRING && (GTEST_OS_LINUX || \ 3891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_OS_MAC || \ 3901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_OS_CYGWIN || \ 39184190c7c1f1b899ad83fdd8e110bde08ad281534Nicolas Catania (GTEST_OS_WINDOWS && _MSC_VER >= 1400)) 3921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_DEATH_TEST 1 3931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#include <vector> 3941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif 3951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines whether to support value-parameterized tests. 3971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 3981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if defined(__GNUC__) || (_MSC_VER >= 1400) 3991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// TODO(vladl@google.com): get the implementation rid of vector and list 4001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// to compile on MSVC 7.1. 4011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_PARAM_TEST 1 4021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // defined(__GNUC__) || (_MSC_VER >= 1400) 4031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines whether to support type-driven tests. 4051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Typed tests need <typeinfo> and variadic macros, which gcc and VC 4071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 8.0+ support. 40884190c7c1f1b899ad83fdd8e110bde08ad281534Nicolas Catania// TODO: We should be able to support these on Android but we don't 40984190c7c1f1b899ad83fdd8e110bde08ad281534Nicolas Catania// have cxxabi.h when building for the target but we have it for the host. 41084190c7c1f1b899ad83fdd8e110bde08ad281534Nicolas Catania#if ( defined(__GNUC__) || (_MSC_VER >= 1400) ) && !defined(GTEST_OS_ANDROID) 4111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_TYPED_TEST 1 4121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_TYPED_TEST_P 1 41384190c7c1f1b899ad83fdd8e110bde08ad281534Nicolas Catania#endif // defined(__GNUC__) || (_MSC_VER >= 1400) && !defined(GTEST_OS_ANDROID) 4141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines whether to support Combine(). This only makes sense when 4161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// value-parameterized tests are enabled. 4171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE 4181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_HAS_COMBINE 1 4191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE 4201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Determines whether the system compiler uses UTF-16 for encoding wide strings. 4221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_WIDE_STRING_USES_UTF16_ \ 4231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN) 4241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Defines some utility macros. 4261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The GNU compiler emits a warning if nested "if" statements are followed by 4281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// an "else" statement and braces are not used to explicitly disambiguate the 4291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// "else" binding. This leads to problems with code like: 4301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 4311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// if (gate) 4321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// ASSERT_*(condition) << "Some message"; 4331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 4341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The "switch (0) case 0:" idiom is used to suppress this. 4351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifdef __INTEL_COMPILER 4361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_AMBIGUOUS_ELSE_BLOCKER_ 4371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 4381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: // NOLINT 4391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif 4401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Use this annotation at the end of a struct / class definition to 4421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// prevent the compiler from optimizing away instances that are never 4431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// used. This is useful when all interesting logic happens inside the 4441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// c'tor and / or d'tor. Example: 4451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 4461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// struct Foo { 4471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Foo() { ... } 4481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// } GTEST_ATTRIBUTE_UNUSED_; 4491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if defined(__GNUC__) && !defined(COMPILER_ICC) 4501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused)) 4511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 4521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_ATTRIBUTE_UNUSED_ 4531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif 4541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A macro to disallow the evil copy constructor and operator= functions 4561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This should be used in the private: declarations for a class. 4571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\ 4581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania type(const type &);\ 4591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void operator=(const type &) 4601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Tell the compiler to warn about unused return values for functions declared 4621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// with this macro. The macro should be used on function declarations 4631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// following the argument list: 4641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 4651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_; 4661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC) 4671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result)) 4681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 4691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_MUST_USE_RESULT_ 4701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC 4711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace testing { 4731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Message; 4751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catanianamespace internal { 4771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass String; 4791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// std::strstream is deprecated. However, we have to use it on 4811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Windows as std::stringstream won't compile on Windows when 4821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// exceptions are disabled. We use std::stringstream on other 4831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// platforms to avoid compiler warnings there. 4841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_STD_STRING 4851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef ::std::stringstream StrStream; 4861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 4871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef ::std::strstream StrStream; 4881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_STRING 4891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Defines scoped_ptr. 4911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 4921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This implementation of scoped_ptr is PARTIAL - it only contains 4931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// enough stuff to satisfy Google Test's need. 4941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 4951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass scoped_ptr { 4961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 4971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania explicit scoped_ptr(T* p = NULL) : ptr_(p) {} 4981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ~scoped_ptr() { reset(); } 4991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania T& operator*() const { return *ptr_; } 5011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania T* operator->() const { return ptr_; } 5021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania T* get() const { return ptr_; } 5031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania T* release() { 5051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania T* const ptr = ptr_; 5061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ptr_ = NULL; 5071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return ptr; 5081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 5091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void reset(T* p = NULL) { 5111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (p != ptr_) { 5121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (sizeof(T) > 0) { // Makes sure T is a complete type. 5131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania delete ptr_; 5141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 5151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ptr_ = p; 5161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 5171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 5181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania private: 5191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania T* ptr_; 5201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr); 5221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 5231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Defines RE. 5251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A simple C++ wrapper for <regex.h>. It uses the POSIX Enxtended 5271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Regular Expression syntax. 5281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass RE { 5291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 5301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Constructs an RE from a string. 5311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_STD_STRING 5321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RE(const ::std::string& regex) { Init(regex.c_str()); } // NOLINT 5331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_STRING 5341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_GLOBAL_STRING 5361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RE(const ::string& regex) { Init(regex.c_str()); } // NOLINT 5371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_GLOBAL_STRING 5381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania RE(const char* regex) { Init(regex); } // NOLINT 5401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ~RE(); 5411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // Returns the string representation of the regex. 5431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* pattern() const { return pattern_; } 5441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // FullMatch(str, re) returns true iff regular expression re matches 5461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // the entire str. 5471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // PartialMatch(str, re) returns true iff regular expression re 5481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // matches a substring of str (including str itself). 5491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 5501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // TODO(wan@google.com): make FullMatch() and PartialMatch() work 5511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // when str contains NUL characters. 5521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_STD_STRING 5531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static bool FullMatch(const ::std::string& str, const RE& re) { 5541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return FullMatch(str.c_str(), re); 5551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 5561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static bool PartialMatch(const ::std::string& str, const RE& re) { 5571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return PartialMatch(str.c_str(), re); 5581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 5591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_STRING 5601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_GLOBAL_STRING 5621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static bool FullMatch(const ::string& str, const RE& re) { 5631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return FullMatch(str.c_str(), re); 5641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 5651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static bool PartialMatch(const ::string& str, const RE& re) { 5661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return PartialMatch(str.c_str(), re); 5671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 5681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_GLOBAL_STRING 5691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static bool FullMatch(const char* str, const RE& re); 5711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static bool PartialMatch(const char* str, const RE& re); 5721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania private: 5741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void Init(const char* regex); 5751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // We use a const char* instead of a string, as Google Test may be used 5771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // where string is not available. We also do not use Google Test's own 5781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // String type here, in order to simplify dependencies between the 5791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // files. 5801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* pattern_; 5811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool is_valid_; 5821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_USES_POSIX_RE 5831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania regex_t full_regex_; // For FullMatch(). 5841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania regex_t partial_regex_; // For PartialMatch(). 5851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else // GTEST_USES_SIMPLE_RE 5861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const char* full_pattern_; // For FullMatch(); 5871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif 5881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_DISALLOW_COPY_AND_ASSIGN_(RE); 5901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 5911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Defines logging utilities: 5931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_LOG_() - logs messages at the specified severity level. 5941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// LogToStderr() - directs all log messages to stderr. 5951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// FlushInfoLog() - flushes informational log messages. 5961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 5971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaenum GTestLogSeverity { 5981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_INFO, 5991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_WARNING, 6001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_ERROR, 6011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_FATAL 6021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 6031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid GTestLog(GTestLogSeverity severity, const char* file, 6051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania int line, const char* msg); 6061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_LOG_(severity, msg)\ 6081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::testing::internal::GTestLog(\ 6091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::testing::internal::GTEST_##severity, __FILE__, __LINE__, \ 6101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania (::testing::Message() << (msg)).GetString().c_str()) 6111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniainline void LogToStderr() {} 6131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniainline void FlushInfoLog() { fflush(NULL); } 6141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Defines the stderr capturer: 6161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// CaptureStderr - starts capturing stderr. 6171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GetCapturedStderr - stops capturing stderr and returns the captured string. 6181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_STD_STRING 6201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid CaptureStderr(); 6211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania::std::string GetCapturedStderr(); 6221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_STD_STRING 6231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_HAS_DEATH_TEST 6251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A copy of all command line arguments. Set by InitGoogleTest(). 6271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaextern ::std::vector<String> g_argvs; 6281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_HAS_DEATH_TEST implies we have ::std::string. 6301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaconst ::std::vector<String>& GetArgvs(); 6311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_HAS_DEATH_TEST 6331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Defines synchronization primitives. 6351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A dummy implementation of synchronization primitives (mutex, lock, 6371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// and thread-local variable). Necessary for compiling Google Test where 6381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// mutex is not supported - using Google Test in multiple threads is not 6391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// supported on such platforms. 6401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass Mutex { 6421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 6431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania Mutex() {} 6441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania explicit Mutex(int /*unused*/) {} 6451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void AssertHeld() const {} 6461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania enum { NO_CONSTRUCTOR_NEEDED_FOR_STATIC_MUTEX = 0 }; 6471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 6481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// We cannot call it MutexLock directly as the ctor declaration would 6501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// conflict with a macro named MutexLock, which is defined on some 6511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// platforms. Hence the typedef trick below. 6521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass GTestMutexLock { 6531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 6541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania explicit GTestMutexLock(Mutex*) {} // NOLINT 6551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 6561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef GTestMutexLock MutexLock; 6581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 6601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass ThreadLocal { 6611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 6621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ThreadLocal() : value_() {} 6631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania explicit ThreadLocal(const T& value) : value_(value) {} 6641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania T* pointer() { return &value_; } 6651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T* pointer() const { return &value_; } 6661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania const T& get() const { return value_; } 6671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void set(const T& value) { value_ = value; } 6681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania private: 6691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania T value_; 6701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 6711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// There's no portable way to detect the number of threads, so we just 6731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// return 0 to indicate that we cannot detect it. 6741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniainline size_t GetThreadCount() { return 0; } 6751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The above synchronization primitives have dummy implementations. 6771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Therefore Google Test is not thread-safe. 6781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_IS_THREADSAFE 0 6791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if defined(__SYMBIAN32__) || defined(__IBMCPP__) 6811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Passing non-POD classes through ellipsis (...) crashes the ARM 6831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// compiler. The Nokia Symbian and the IBM XL C/C++ compiler try to 6841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// instantiate a copy constructor for objects passed through ellipsis 6851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// (...), failing for uncopyable objects. We define this to indicate 6861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// the fact. 6871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_ELLIPSIS_NEEDS_COPY_ 1 6881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The Nokia Symbian and IBM XL C/C++ compilers cannot decide between 6901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// const T& and const T* in a function template. These compilers 6911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// _can_ decide between class template specializations for T and T*, 6921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// so a tr1::type_traits-like is_pointer works. 6931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_NEEDS_IS_POINTER_ 1 6941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // defined(__SYMBIAN32__) || defined(__IBMCPP__) 6961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 6971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <bool bool_value> 6981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct bool_constant { 6991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typedef bool_constant<bool_value> type; 7001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania static const bool value = bool_value; 7011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 7021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <bool bool_value> const bool bool_constant<bool_value>::value; 7031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef bool_constant<false> false_type; 7051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef bool_constant<true> true_type; 7061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 7081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct is_pointer : public false_type {}; 7091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <typename T> 7111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniastruct is_pointer<T*> : public true_type {}; 7121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_OS_WINDOWS 7141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PATH_SEP_ "\\" 7151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 7161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_PATH_SEP_ "/" 7171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_OS_WINDOWS 7181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Defines BiggestInt as the biggest signed integer type the compiler 7201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// supports. 7211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_OS_WINDOWS 7221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef __int64 BiggestInt; 7231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 7241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef long long BiggestInt; // NOLINT 7251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_OS_WINDOWS 7261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The maximum number a BiggestInt can represent. This definition 7281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// works no matter BiggestInt is represented in one's complement or 7291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// two's complement. 7301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 7311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// We cannot rely on numeric_limits in STL, as __int64 and long long 7321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// are not part of standard C++ and numeric_limits doesn't need to be 7331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// defined for them. 7341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaconst BiggestInt kMaxBiggestInt = 7351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ~(static_cast<BiggestInt>(1) << (8*sizeof(BiggestInt) - 1)); 7361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This template class serves as a compile-time function from size to 7381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// type. It maps a size in bytes to a primitive type with that 7391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// size. e.g. 7401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 7411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// TypeWithSize<4>::UInt 7421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 7431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is typedef-ed to be unsigned int (unsigned integer made up of 4 7441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// bytes). 7451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 7461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Such functionality should belong to STL, but I cannot find it 7471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// there. 7481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 7491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Google Test uses this class in the implementation of floating-point 7501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// comparison. 7511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 7521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// For now it only handles UInt (unsigned int) as that's all Google Test 7531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// needs. Other types can be easily added in the future if need 7541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// arises. 7551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <size_t size> 7561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass TypeWithSize { 7571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 7581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // This prevents the user from using TypeWithSize<N> with incorrect 7591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // values of N. 7601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typedef void UInt; 7611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 7621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The specialization for size 4. 7641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <> 7651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass TypeWithSize<4> { 7661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 7671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // unsigned int has size 4 in both gcc and MSVC. 7681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // 7691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // As base/basictypes.h doesn't compile on Windows, we cannot use 7701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // uint32, uint64, and etc here. 7711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typedef int Int; 7721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typedef unsigned int UInt; 7731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 7741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// The specialization for size 8. 7761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatemplate <> 7771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass TypeWithSize<8> { 7781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 7791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if GTEST_OS_WINDOWS 7801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typedef __int64 Int; 7811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typedef unsigned __int64 UInt; 7821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 7831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typedef long long Int; // NOLINT 7841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania typedef unsigned long long UInt; // NOLINT 7851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_OS_WINDOWS 7861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 7871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Integer types of known sizes. 7891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef TypeWithSize<4>::Int Int32; 7901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef TypeWithSize<4>::UInt UInt32; 7911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef TypeWithSize<8>::Int Int64; 7921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef TypeWithSize<8>::UInt UInt64; 7931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniatypedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds. 7941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Utilities for command line flags and environment variables. 7961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 7971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// A wrapper for getenv() that works on Linux, Windows, and Mac OS. 7981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniainline const char* GetEnv(const char* name) { 7991be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifdef _WIN32_WCE // We are on Windows CE. 8001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // CE has no environment variables. 8011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return NULL; 8021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#elif GTEST_OS_WINDOWS // We are on Windows proper. 8031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // MSVC 8 deprecates getenv(), so we want to suppress warning 4996 8041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania // (deprecated function) there. 8051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#pragma warning(push) // Saves the current warning state. 8061be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#pragma warning(disable:4996) // Temporarily disables warning 4996. 8071be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return getenv(name); 8081be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#pragma warning(pop) // Restores the warning state. 8091be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else // We are on Linux or Mac OS. 8101be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania return getenv(name); 8111be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif 8121be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} 8131be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 8141be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#ifdef _WIN32_WCE 8151be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Windows CE has no C library. The abort() function is used in 8161be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// several places in Google Test. This implementation provides a reasonable 8171be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// imitation of standard behaviour. 8181be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniavoid abort(); 8191be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 8201be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniainline void abort() { ::abort(); } 8211be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // _WIN32_WCE 8221be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 8231be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// INTERNAL IMPLEMENTATION - DO NOT USE. 8241be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 8251be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition 8261be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// is not satisfied. 8271be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Synopsys: 8281be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_CHECK_(boolean_condition); 8291be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// or 8301be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// GTEST_CHECK_(boolean_condition) << "Additional message"; 8311be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// 8321be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// This checks the condition and if the condition is not satisfied 8331be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// it prints message about the condition violation, including the 8341be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// condition itself, plus additional message streamed into it, if any, 8351be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// and then it aborts the program. It aborts the program irrespective of 8361be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// whether it is built in the debug mode or not. 8371be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaclass GTestCheckProvider { 8381be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania public: 8391be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTestCheckProvider(const char* condition, const char* file, int line) { 8401be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania FormatFileLocation(file, line); 8411be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::std::cerr << " ERROR: Condition " << condition << " failed. "; 8421be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 8431be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ~GTestCheckProvider() { 8441be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::std::cerr << ::std::endl; 8451be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania abort(); 8461be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 8471be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania void FormatFileLocation(const char* file, int line) { 8481be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (file == NULL) 8491be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania file = "unknown file"; 8501be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (line < 0) { 8511be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::std::cerr << file << ":"; 8521be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } else { 8531be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#if _MSC_VER 8541be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::std::cerr << file << "(" << line << "):"; 8551be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#else 8561be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::std::cerr << file << ":" << line << ":"; 8571be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif 8581be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 8591be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania } 8601be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::std::ostream& GetStream() { return ::std::cerr; } 8611be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania}; 8621be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_CHECK_(condition) \ 8631be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 8641be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania if (condition) \ 8651be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ; \ 8661be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania else \ 8671be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::testing::internal::GTestCheckProvider(\ 8681be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania #condition, __FILE__, __LINE__).GetStream() 8691be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 8701be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Macro for referencing flags. 8711be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_FLAG(name) FLAGS_gtest_##name 8721be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 8731be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Macros for declaring flags. 8741be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_DECLARE_bool_(name) extern bool GTEST_FLAG(name) 8751be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_DECLARE_int32_(name) \ 8761be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania extern ::testing::internal::Int32 GTEST_FLAG(name) 8771be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_DECLARE_string_(name) \ 8781be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania extern ::testing::internal::String GTEST_FLAG(name) 8791be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 8801be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Macros for defining flags. 8811be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_DEFINE_bool_(name, default_val, doc) \ 8821be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania bool GTEST_FLAG(name) = (default_val) 8831be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_DEFINE_int32_(name, default_val, doc) \ 8841be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::testing::internal::Int32 GTEST_FLAG(name) = (default_val) 8851be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#define GTEST_DEFINE_string_(name, default_val, doc) \ 8861be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania ::testing::internal::String GTEST_FLAG(name) = (default_val) 8871be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 8881be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Parses 'str' for a 32-bit signed integer. If successful, writes the result 8891be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// to *value and returns true; otherwise leaves *value unchanged and returns 8901be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// false. 8911be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// TODO(chandlerc): Find a better way to refactor flag and environment parsing 8921be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// out of both gtest-port.cc and gtest.cc to avoid exporting this utility 8931be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// function. 8941be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool ParseInt32(const Message& src_text, const char* str, Int32* value); 8951be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 8961be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// Parses a bool/Int32/string from the environment variable 8971be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania// corresponding to the given Google Test flag. 8981be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniabool BoolFromGTestEnv(const char* flag, bool default_val); 8991be2c9def7187e4e643c00a31dd9986395795d7dNicolas CataniaInt32 Int32FromGTestEnv(const char* flag, Int32 default_val); 9001be2c9def7187e4e643c00a31dd9986395795d7dNicolas Cataniaconst char* StringFromGTestEnv(const char* flag, const char* default_val); 9011be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 9021be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace internal 9031be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania} // namespace testing 9041be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania 9051be2c9def7187e4e643c00a31dd9986395795d7dNicolas Catania#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 906