Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
yangql
googletest
Commits
06d04c09
Commit
06d04c09
authored
Mar 17, 2010
by
vladlosev
Browse files
Solaris and AIX patch by Hady Zalek
parent
a6978ecb
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
61 additions
and
27 deletions
+61
-27
include/gtest/internal/gtest-port.h
include/gtest/internal/gtest-port.h
+55
-17
test/gtest_unittest.cc
test/gtest_unittest.cc
+6
-10
No files found.
include/gtest/internal/gtest-port.h
View file @
06d04c09
...
...
@@ -78,6 +78,7 @@
//
// Macros indicating the current platform (defined to 1 if compiled on
// the given platform; otherwise undefined):
// GTEST_OS_AIX - IBM AIX
// GTEST_OS_CYGWIN - Cygwin
// GTEST_OS_LINUX - Linux
// GTEST_OS_MAC - Mac OS X
...
...
@@ -109,6 +110,7 @@
// GTEST_USES_POSIX_RE - enhanced POSIX regex is used.
// GTEST_USES_SIMPLE_RE - our own simple regex is used;
// the above two are mutually exclusive.
// GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ().
//
// Macros for basic C++ coding:
// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning.
...
...
@@ -215,10 +217,12 @@
#define GTEST_OS_ZOS 1
#elif defined(__sun) && defined(__SVR4)
#define GTEST_OS_SOLARIS 1
#elif defined(_AIX)
#define GTEST_OS_AIX 1
#endif // __CYGWIN__
#if GTEST_OS_CYGWIN || GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_SYMBIAN || \
GTEST_OS_SOLARIS
GTEST_OS_SOLARIS
|| GTEST_OS_AIX
// On some platforms, <regex.h> needs someone to define size_t, and
// won't compile otherwise. We can #include it here as we already
...
...
@@ -250,7 +254,7 @@
#define GTEST_USES_SIMPLE_RE 1
#endif // GTEST_OS_CYGWIN || GTEST_OS_LINUX || GTEST_OS_MAC ||
// GTEST_OS_SYMBIAN || GTEST_OS_SOLARIS
// GTEST_OS_SYMBIAN || GTEST_OS_SOLARIS
|| GTEST_OS_AIX
#ifndef GTEST_HAS_EXCEPTIONS
// The user didn't tell us whether exceptions are enabled, so we need
...
...
@@ -271,6 +275,9 @@
// detecting whether they are enabled or not. Therefore, we assume that
// they are enabled unless the user tells us otherwise.
#define GTEST_HAS_EXCEPTIONS 1
#elif defined(__IBMCPP__) && __EXCEPTIONS
// xlC defines __EXCEPTIONS to 1 iff exceptions are enabled.
#define GTEST_HAS_EXCEPTIONS 1
#else
// For other compilers, we assume exceptions are disabled to be
// conservative.
...
...
@@ -477,9 +484,10 @@
// Determines whether to support type-driven tests.
// Typed tests need <typeinfo> and variadic macros, which GCC, VC++ 8.0, and
// Sun Pro CC support.
#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC)
// Typed tests need <typeinfo> and variadic macros, which GCC, VC++ 8.0,
// Sun Pro CC, and IBM Visual Age support.
#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \
defined(__IBMCPP__)
#define GTEST_HAS_TYPED_TEST 1
#define GTEST_HAS_TYPED_TEST_P 1
#endif
...
...
@@ -492,7 +500,7 @@
// Determines whether the system compiler uses UTF-16 for encoding wide strings.
#define GTEST_WIDE_STRING_USES_UTF16_ \
(GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN)
(GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN
|| GTEST_OS_AIX
)
// Defines some utility macros.
...
...
@@ -631,10 +639,14 @@ class scoped_ptr {
// Defines RE.
// A simple C++ wrapper for <regex.h>. It uses the POSIX E
n
xtended
// A simple C++ wrapper for <regex.h>. It uses the POSIX Extended
// Regular Expression syntax.
class
GTEST_API_
RE
{
public:
// A copy constructor is required by the Standard to initialize object
// references from r-values.
RE
(
const
RE
&
other
)
{
Init
(
other
.
pattern
());
}
// Constructs an RE from a string.
RE
(
const
::
std
::
string
&
regex
)
{
Init
(
regex
.
c_str
());
}
// NOLINT
...
...
@@ -690,7 +702,7 @@ class GTEST_API_ RE {
const
char
*
full_pattern_
;
// For FullMatch();
#endif
GTEST_DISALLOW_
COPY_AND_
ASSIGN_
(
RE
);
GTEST_DISALLOW_ASSIGN_
(
RE
);
};
// Defines logging utilities:
...
...
@@ -831,6 +843,28 @@ class Notification {
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
Notification
);
};
// As a C-function, ThreadFuncWithCLinkage cannot be templated itself.
// Consequently, it cannot select a correct instantiation of ThreadWithParam
// in order to call its Run(). Introducing ThreadWithParamBase as a
// non-templated base class for ThreadWithParam allows us to bypass this
// problem.
class
ThreadWithParamBase
{
public:
virtual
~
ThreadWithParamBase
()
{}
virtual
void
Run
()
=
0
;
};
// pthread_create() accepts a pointer to a function type with the C linkage.
// According to the Standard (7.5/1), function types with different linkages
// are different even if they are otherwise identical. Some compilers (for
// example, SunStudio) treat them as different types. Since class methods
// cannot be defined with C-linkage we need to define a free C-function to
// pass into pthread_create().
extern
"C"
inline
void
*
ThreadFuncWithCLinkage
(
void
*
thread
)
{
static_cast
<
ThreadWithParamBase
*>
(
thread
)
->
Run
();
return
NULL
;
}
// Helper class for testing Google Test's multi-threading constructs.
// To use it, write:
//
...
...
@@ -844,7 +878,7 @@ class Notification {
// These classes are only for testing Google Test's own constructs. Do
// not use them in user tests, either directly or indirectly.
template
<
typename
T
>
class
ThreadWithParam
{
class
ThreadWithParam
:
public
ThreadWithParamBase
{
public:
typedef
void
(
*
UserThreadFunc
)(
T
);
...
...
@@ -857,7 +891,12 @@ class ThreadWithParam {
// The thread can be created only after all fields except thread_
// have been initialized.
GTEST_CHECK_POSIX_SUCCESS_
(
pthread_create
(
&
thread_
,
0
,
ThreadMainStatic
,
this
));
// TODO(vladl@google.com): Use implicit_cast instead of static_cast
// when it is moved over from Google Mock.
pthread_create
(
&
thread_
,
0
,
&
ThreadFuncWithCLinkage
,
static_cast
<
ThreadWithParamBase
*>
(
this
)));
}
~
ThreadWithParam
()
{
Join
();
}
...
...
@@ -868,18 +907,13 @@ class ThreadWithParam {
}
}
private:
void
ThreadMain
()
{
virtual
void
Run
()
{
if
(
thread_can_start_
!=
NULL
)
thread_can_start_
->
WaitForNotification
();
func_
(
param_
);
}
static
void
*
ThreadMainStatic
(
void
*
thread_with_param
)
{
static_cast
<
ThreadWithParam
<
T
>*>
(
thread_with_param
)
->
ThreadMain
();
return
NULL
;
// We are not interested in the thread exit code.
}
private:
const
UserThreadFunc
func_
;
// User-supplied thread function.
const
T
param_
;
// User-supplied parameter to the thread function.
// When non-NULL, used to block execution until the controller thread
...
...
@@ -1110,7 +1144,11 @@ size_t GetThreadCount();
// objects. We define this to ensure that only POD is passed through
// ellipsis on these systems.
#if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)
// We lose support for NULL detection where the compiler doesn't like
// passing non-POD classes through ellipsis (...).
#define GTEST_ELLIPSIS_NEEDS_POD_ 1
#else
#define GTEST_CAN_COMPARE_NULL 1
#endif
// The Nokia Symbian and IBM XL C/C++ compilers cannot decide between
...
...
test/gtest_unittest.cc
View file @
06d04c09
...
...
@@ -296,8 +296,7 @@ TEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) {
EXPECT_EQ
(
"-3"
,
FormatTimeInMillisAsSeconds
(
-
3000
));
}
#if !GTEST_OS_SYMBIAN
// NULL testing does not work with Symbian compilers.
#if GTEST_CAN_COMPARE_NULL
#ifdef __BORLANDC__
// Silences warnings: "Condition is always true", "Unreachable code"
...
...
@@ -335,7 +334,7 @@ TEST(NullLiteralTest, IsFalseForNonNullLiterals) {
#pragma option pop
#endif
#endif //
!
GTEST_
OS_SYMBIAN
#endif // GTEST_
CAN_COMPARE_NULL
//
// Tests CodePointToUtf8().
...
...
@@ -3559,10 +3558,7 @@ TEST(AssertionTest, ASSERT_EQ) {
}
// Tests ASSERT_EQ(NULL, pointer).
#if !GTEST_OS_SYMBIAN
// The NULL-detection template magic fails to compile with
// the Nokia compiler and crashes the ARM compiler, hence
// not testing on Symbian.
#if GTEST_CAN_COMPARE_NULL
TEST
(
AssertionTest
,
ASSERT_EQ_NULL
)
{
// A success.
const
char
*
p
=
NULL
;
...
...
@@ -3577,7 +3573,7 @@ TEST(AssertionTest, ASSERT_EQ_NULL) {
EXPECT_FATAL_FAILURE
(
ASSERT_EQ
(
NULL
,
&
n
),
"Value of: &n
\n
"
);
}
#endif //
!
GTEST_
OS_SYMBIAN
#endif // GTEST_
CAN_COMPARE_NULL
// Tests ASSERT_EQ(0, non_pointer). Since the literal 0 can be
// treated as a null pointer by the compiler, we need to make sure
...
...
@@ -4141,7 +4137,7 @@ TEST(ExpectTest, EXPECT_EQ_Double) {
"5.1"
);
}
#if
!
GTEST_
OS_SYMBIAN
#if GTEST_
CAN_COMPARE_NULL
// Tests EXPECT_EQ(NULL, pointer).
TEST
(
ExpectTest
,
EXPECT_EQ_NULL
)
{
// A success.
...
...
@@ -4157,7 +4153,7 @@ TEST(ExpectTest, EXPECT_EQ_NULL) {
EXPECT_NONFATAL_FAILURE
(
EXPECT_EQ
(
NULL
,
&
n
),
"Value of: &n
\n
"
);
}
#endif //
!
GTEST_
OS_SYMBIAN
#endif // GTEST_
CAN_COMPARE_NULL
// Tests EXPECT_EQ(0, non_pointer). Since the literal 0 can be
// treated as a null pointer by the compiler, we need to make sure
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment