Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
googletest
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
googletest
Commits
f0b86fc3
Commit
f0b86fc3
authored
Mar 09, 2012
by
jgm
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Misc small updates to some debug death code, and to messages streaming to macros
parent
cfb40870
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
164 additions
and
43 deletions
+164
-43
gtest-death-test.h
include/gtest/gtest-death-test.h
+3
-3
gtest-param-test.h
include/gtest/gtest-param-test.h
+1
-1
gtest-param-test.h.pump
include/gtest/gtest-param-test.h.pump
+1
-1
gtest.h
include/gtest/gtest.h
+0
-6
gtest-death-test-internal.h
include/gtest/internal/gtest-death-test-internal.h
+11
-0
gtest-port.cc
src/gtest-port.cc
+8
-3
gtest-death-test_test.cc
test/gtest-death-test_test.cc
+14
-18
gtest_env_var_test.py
test/gtest_env_var_test.py
+2
-1
gtest_output_test.py
test/gtest_output_test.py
+1
-1
gtest_output_test_.cc
test/gtest_output_test_.cc
+4
-4
gtest_shuffle_test.py
test/gtest_shuffle_test.py
+2
-1
gtest_unittest.cc
test/gtest_unittest.cc
+117
-4
No files found.
include/gtest/gtest-death-test.h
View file @
f0b86fc3
...
...
@@ -86,7 +86,7 @@ GTEST_API_ bool InDeathTestChild();
// for (int i = 0; i < 5; i++) {
// EXPECT_DEATH(server.ProcessRequest(i),
// "Invalid request .* in ProcessRequest()")
//
<< "Failed to die on request " << i)
;
//
<< "Failed to die on request " << i
;
// }
//
// ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting");
...
...
@@ -256,10 +256,10 @@ class GTEST_API_ KilledBySignal {
# ifdef NDEBUG
# define EXPECT_DEBUG_DEATH(statement, regex) \
do { statement; } while (::testing::internal::AlwaysFalse()
)
GTEST_EXECUTE_STATEMENT_(statement, regex
)
# define ASSERT_DEBUG_DEATH(statement, regex) \
do { statement; } while (::testing::internal::AlwaysFalse()
)
GTEST_EXECUTE_STATEMENT_(statement, regex
)
# else
...
...
include/gtest/gtest-param-test.h
View file @
f0b86fc3
...
...
@@ -1257,7 +1257,7 @@ inline internal::ParamGenerator<bool> Bool() {
// Boolean flags:
//
// class FlagDependentTest
// : public testing::TestWithParam<tuple
(bool, bool)
> > {
// : public testing::TestWithParam<tuple
<bool, bool
> > {
// virtual void SetUp() {
// // Assigns external_flag_1 and external_flag_2 values from the tuple.
// tie(external_flag_1, external_flag_2) = GetParam();
...
...
include/gtest/gtest-param-test.h.pump
View file @
f0b86fc3
...
...
@@ -414,7 +414,7 @@ inline internal::ParamGenerator<bool> Bool() {
// Boolean flags:
//
// class FlagDependentTest
// : public testing::TestWithParam<tuple
(bool, bool)
> > {
// : public testing::TestWithParam<tuple
<bool, bool
> > {
// virtual void SetUp() {
// // Assigns external_flag_1 and external_flag_2 values from the tuple.
// tie(external_flag_1, external_flag_2) = GetParam();
...
...
include/gtest/gtest.h
View file @
f0b86fc3
...
...
@@ -1731,12 +1731,6 @@ class TestWithParam : public Test, public WithParamInterface<T> {
// usually want the fail-fast behavior of FAIL and ASSERT_*, but those
// writing data-driven tests often find themselves using ADD_FAILURE
// and EXPECT_* more.
//
// Examples:
//
// EXPECT_TRUE(server.StatusIsOK());
// ASSERT_FALSE(server.HasPendingRequest(port))
// << "There are still pending requests " << "on port " << port;
// Generates a nonfatal failure with a generic message.
#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed")
...
...
include/gtest/internal/gtest-death-test-internal.h
View file @
f0b86fc3
...
...
@@ -217,6 +217,17 @@ GTEST_API_ bool ExitedUnsuccessfully(int exit_status);
// The symbol "fail" here expands to something into which a message
// can be streamed.
// This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in
// NDEBUG mode. In this case we need the statements to be executed, the regex is
// ignored, and the macro must accept a streamed message even though the message
// is never printed.
# define GTEST_EXECUTE_STATEMENT_(statement, regex) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
if (::testing::internal::AlwaysTrue()) { \
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
} else \
::testing::Message()
// A class representing the parsed contents of the
// --gtest_internal_run_death_test flag, as it existed when
// RUN_ALL_TESTS was called.
...
...
src/gtest-port.cc
View file @
f0b86fc3
...
...
@@ -530,10 +530,15 @@ class CapturedStream {
<<
temp_file_path
;
filename_
=
temp_file_path
;
# else
// There's no guarantee that a test has write access to the
// current directory, so we create the temporary file in the /tmp
// directory instead.
// There's no guarantee that a test has write access to the current
// directory, so we create the temporary file in the /tmp directory instead.
// We use /tmp on most systems, and /mnt/sdcard on Android. That's because
// Android doesn't have /tmp.
# if GTEST_OS_LINUX_ANDROID
char
name_template
[]
=
"/mnt/sdcard/gtest_captured_stream.XXXXXX"
;
# else
char
name_template
[]
=
"/tmp/captured_stream.XXXXXX"
;
# endif // GTEST_OS_LINUX_ANDROID
const
int
captured_fd
=
mkstemp
(
name_template
);
filename_
=
name_template
;
# endif // GTEST_OS_WINDOWS
...
...
test/gtest-death-test_test.cc
View file @
f0b86fc3
...
...
@@ -618,8 +618,8 @@ TEST_F(TestForDeathTest, ReturnIsFailure) {
"illegal return in test statement."
);
}
// Tests that EXPECT_DEBUG_DEATH works as expected,
//
that is, in debug mode,
it:
// Tests that EXPECT_DEBUG_DEATH works as expected,
that is, you can stream a
//
message to it, and in debug mode
it:
// 1. Asserts on death.
// 2. Has no side effect.
//
...
...
@@ -628,8 +628,8 @@ TEST_F(TestForDeathTest, ReturnIsFailure) {
TEST_F
(
TestForDeathTest
,
TestExpectDebugDeath
)
{
int
sideeffect
=
0
;
EXPECT_DEBUG_DEATH
(
DieInDebugElse12
(
&
sideeffect
),
"death.*DieInDebugElse12"
)
;
EXPECT_DEBUG_DEATH
(
DieInDebugElse12
(
&
sideeffect
),
"death.*DieInDebugElse12"
)
<<
"Must accept a streamed message"
;
# ifdef NDEBUG
...
...
@@ -644,22 +644,18 @@ TEST_F(TestForDeathTest, TestExpectDebugDeath) {
# endif
}
// Tests that ASSERT_DEBUG_DEATH works as expected
//
In debug mode
:
// 1. Asserts on de
bug de
ath.
// Tests that ASSERT_DEBUG_DEATH works as expected
, that is, you can stream a
//
message to it, and in debug mode it
:
// 1. Asserts on death.
// 2. Has no side effect.
//
//
In opt mode
:
// 1.
Has side effects and returns the expected value (12)
.
//
And in opt mode, it
:
// 1.
Has side effects but does not assert
.
TEST_F
(
TestForDeathTest
,
TestAssertDebugDeath
)
{
int
sideeffect
=
0
;
ASSERT_DEBUG_DEATH
({
// NOLINT
// Tests that the return value is 12 in opt mode.
EXPECT_EQ
(
12
,
DieInDebugElse12
(
&
sideeffect
));
// Tests that the side effect occurred in opt mode.
EXPECT_EQ
(
12
,
sideeffect
);
},
"death.*DieInDebugElse12"
);
ASSERT_DEBUG_DEATH
(
DieInDebugElse12
(
&
sideeffect
),
"death.*DieInDebugElse12"
)
<<
"Must accept a streamed message"
;
# ifdef NDEBUG
...
...
@@ -730,7 +726,7 @@ static void TestExitMacros() {
// Of all signals effects on the process exit code, only those of SIGABRT
// are documented on Windows.
// See http://msdn.microsoft.com/en-us/library/dwwzkt4c(VS.71).aspx.
EXPECT_EXIT
(
raise
(
SIGABRT
),
testing
::
ExitedWithCode
(
3
),
""
);
EXPECT_EXIT
(
raise
(
SIGABRT
),
testing
::
ExitedWithCode
(
3
),
""
)
<<
"b_ar"
;
# else
...
...
@@ -739,14 +735,14 @@ static void TestExitMacros() {
EXPECT_FATAL_FAILURE
({
// NOLINT
ASSERT_EXIT
(
_exit
(
0
),
testing
::
KilledBySignal
(
SIGSEGV
),
""
)
<<
"This failure is expected, too."
;
<<
"This failure is expected, too."
;
},
"This failure is expected, too."
);
# endif // GTEST_OS_WINDOWS
EXPECT_NONFATAL_FAILURE
({
// NOLINT
EXPECT_EXIT
(
raise
(
SIGSEGV
),
testing
::
ExitedWithCode
(
0
),
""
)
<<
"This failure is expected."
;
<<
"This failure is expected."
;
},
"This failure is expected."
);
}
...
...
test/gtest_env_var_test.py
View file @
f0b86fc3
...
...
@@ -67,7 +67,8 @@ def GetFlag(flag):
args
=
[
COMMAND
]
if
flag
is
not
None
:
args
+=
[
flag
]
return
gtest_test_utils
.
Subprocess
(
args
,
env
=
environ
)
.
output
return
gtest_test_utils
.
Subprocess
(
args
,
env
=
environ
,
capture_stderr
=
False
)
.
output
def
TestFlag
(
flag
,
test_val
,
default_val
):
...
...
test/gtest_output_test.py
View file @
f0b86fc3
...
...
@@ -213,7 +213,7 @@ def GetShellCommandOutput(env_cmd):
# Set and save the environment properly.
environ
=
os
.
environ
.
copy
()
environ
.
update
(
env_cmd
[
0
])
p
=
gtest_test_utils
.
Subprocess
(
env_cmd
[
1
],
env
=
environ
)
p
=
gtest_test_utils
.
Subprocess
(
env_cmd
[
1
],
env
=
environ
,
capture_stderr
=
False
)
return
p
.
output
...
...
test/gtest_output_test_.cc
View file @
f0b86fc3
...
...
@@ -221,13 +221,13 @@ TEST(SCOPED_TRACETest, CanBeRepeated) {
{
SCOPED_TRACE
(
"C"
);
ADD_FAILURE
()
<<
"This failure is expected, and should
contain
"
<<
"trace point A, B, and C."
;
ADD_FAILURE
()
<<
"This failure is expected, and should "
<<
"
contain
trace point A, B, and C."
;
}
SCOPED_TRACE
(
"D"
);
ADD_FAILURE
()
<<
"This failure is expected, and should
contain
"
<<
"trace point A, B, and D."
;
ADD_FAILURE
()
<<
"This failure is expected, and should "
<<
"
contain
trace point A, B, and D."
;
}
#if GTEST_IS_THREADSAFE
...
...
test/gtest_shuffle_test.py
View file @
f0b86fc3
...
...
@@ -81,7 +81,8 @@ def RunAndReturnOutput(extra_env, args):
environ_copy
=
os
.
environ
.
copy
()
environ_copy
.
update
(
extra_env
)
return
gtest_test_utils
.
Subprocess
([
COMMAND
]
+
args
,
env
=
environ_copy
)
.
output
return
gtest_test_utils
.
Subprocess
([
COMMAND
]
+
args
,
env
=
environ_copy
,
capture_stderr
=
False
)
.
output
def
GetTestsForAllIterations
(
extra_env
,
args
):
...
...
test/gtest_unittest.cc
View file @
f0b86fc3
...
...
@@ -2642,6 +2642,11 @@ TEST(StringAssertionTest, STREQ_Wide) {
// Strings containing wide characters.
EXPECT_NONFATAL_FAILURE
(
EXPECT_STREQ
(
L"abc
\x8119
"
,
L"abc
\x8120
"
),
"abc"
);
// The streaming variation.
EXPECT_NONFATAL_FAILURE
({
// NOLINT
EXPECT_STREQ
(
L"abc
\x8119
"
,
L"abc
\x8121
"
)
<<
"Expected failure"
;
},
"Expected failure"
);
}
// Tests *_STRNE on wide strings.
...
...
@@ -2668,6 +2673,9 @@ TEST(StringAssertionTest, STRNE_Wide) {
// Strings containing wide characters.
EXPECT_NONFATAL_FAILURE
(
EXPECT_STRNE
(
L"abc
\x8119
"
,
L"abc
\x8119
"
),
"abc"
);
// The streaming variation.
ASSERT_STRNE
(
L"abc
\x8119
"
,
L"abc
\x8120
"
)
<<
"This shouldn't happen"
;
}
// Tests for ::testing::IsSubstring().
...
...
@@ -4263,8 +4271,109 @@ TEST(SuccessfulAssertionTest, ASSERT_STR) {
namespace
{
// Tests the message streaming variation of assertions.
TEST
(
AssertionWithMessageTest
,
EXPECT
)
{
EXPECT_EQ
(
1
,
1
)
<<
"This should succeed."
;
EXPECT_NONFATAL_FAILURE
(
EXPECT_NE
(
1
,
1
)
<<
"Expected failure #1."
,
"Expected failure #1"
);
EXPECT_LE
(
1
,
2
)
<<
"This should succeed."
;
EXPECT_NONFATAL_FAILURE
(
EXPECT_LT
(
1
,
0
)
<<
"Expected failure #2."
,
"Expected failure #2."
);
EXPECT_GE
(
1
,
0
)
<<
"This should succeed."
;
EXPECT_NONFATAL_FAILURE
(
EXPECT_GT
(
1
,
2
)
<<
"Expected failure #3."
,
"Expected failure #3."
);
EXPECT_STREQ
(
"1"
,
"1"
)
<<
"This should succeed."
;
EXPECT_NONFATAL_FAILURE
(
EXPECT_STRNE
(
"1"
,
"1"
)
<<
"Expected failure #4."
,
"Expected failure #4."
);
EXPECT_STRCASEEQ
(
"a"
,
"A"
)
<<
"This should succeed."
;
EXPECT_NONFATAL_FAILURE
(
EXPECT_STRCASENE
(
"a"
,
"A"
)
<<
"Expected failure #5."
,
"Expected failure #5."
);
EXPECT_FLOAT_EQ
(
1
,
1
)
<<
"This should succeed."
;
EXPECT_NONFATAL_FAILURE
(
EXPECT_DOUBLE_EQ
(
1
,
1.2
)
<<
"Expected failure #6."
,
"Expected failure #6."
);
EXPECT_NEAR
(
1
,
1.1
,
0.2
)
<<
"This should succeed."
;
}
TEST
(
AssertionWithMessageTest
,
ASSERT
)
{
ASSERT_EQ
(
1
,
1
)
<<
"This should succeed."
;
ASSERT_NE
(
1
,
2
)
<<
"This should succeed."
;
ASSERT_LE
(
1
,
2
)
<<
"This should succeed."
;
ASSERT_LT
(
1
,
2
)
<<
"This should succeed."
;
ASSERT_GE
(
1
,
0
)
<<
"This should succeed."
;
EXPECT_FATAL_FAILURE
(
ASSERT_GT
(
1
,
2
)
<<
"Expected failure."
,
"Expected failure."
);
}
TEST
(
AssertionWithMessageTest
,
ASSERT_STR
)
{
ASSERT_STREQ
(
"1"
,
"1"
)
<<
"This should succeed."
;
ASSERT_STRNE
(
"1"
,
"2"
)
<<
"This should succeed."
;
ASSERT_STRCASEEQ
(
"a"
,
"A"
)
<<
"This should succeed."
;
EXPECT_FATAL_FAILURE
(
ASSERT_STRCASENE
(
"a"
,
"A"
)
<<
"Expected failure."
,
"Expected failure."
);
}
TEST
(
AssertionWithMessageTest
,
ASSERT_FLOATING
)
{
ASSERT_FLOAT_EQ
(
1
,
1
)
<<
"This should succeed."
;
ASSERT_DOUBLE_EQ
(
1
,
1
)
<<
"This should succeed."
;
EXPECT_FATAL_FAILURE
(
ASSERT_NEAR
(
1
,
1.2
,
0.1
)
<<
"Expect failure."
,
// NOLINT
"Expect failure."
);
// To work around a bug in gcc 2.95.0, there is intentionally no
// space after the first comma in the previous statement.
}
// Tests using ASSERT_FALSE with a streamed message.
TEST
(
AssertionWithMessageTest
,
ASSERT_FALSE
)
{
ASSERT_FALSE
(
false
)
<<
"This shouldn't fail."
;
EXPECT_FATAL_FAILURE
({
// NOLINT
ASSERT_FALSE
(
true
)
<<
"Expected failure: "
<<
2
<<
" > "
<<
1
<<
" evaluates to "
<<
true
;
},
"Expected failure"
);
}
// Tests using FAIL with a streamed message.
TEST
(
AssertionWithMessageTest
,
FAIL
)
{
EXPECT_FATAL_FAILURE
(
FAIL
()
<<
0
,
"0"
);
}
// Tests using SUCCEED with a streamed message.
TEST
(
AssertionWithMessageTest
,
SUCCEED
)
{
SUCCEED
()
<<
"Success == "
<<
1
;
}
// Tests using ASSERT_TRUE with a streamed message.
TEST
(
AssertionWithMessageTest
,
ASSERT_TRUE
)
{
ASSERT_TRUE
(
true
)
<<
"This should succeed."
;
ASSERT_TRUE
(
true
)
<<
true
;
EXPECT_FATAL_FAILURE
({
// NOLINT
ASSERT_TRUE
(
false
)
<<
static_cast
<
const
char
*>
(
NULL
)
<<
static_cast
<
char
*>
(
NULL
);
},
"(null)(null)"
);
}
#if GTEST_OS_WINDOWS
// Tests using wide strings in assertion messages.
TEST
(
AssertionWithMessageTest
,
WideStringMessage
)
{
EXPECT_NONFATAL_FAILURE
({
// NOLINT
EXPECT_TRUE
(
false
)
<<
L"This failure is expected.
\x8119
"
;
},
"This failure is expected."
);
EXPECT_FATAL_FAILURE
({
// NOLINT
ASSERT_EQ
(
1
,
2
)
<<
"This failure is "
<<
L"expected too.
\x8120
"
;
},
"This failure is expected too."
);
}
#endif // GTEST_OS_WINDOWS
// Tests EXPECT_TRUE.
TEST
(
ExpectTest
,
EXPECT_TRUE
)
{
EXPECT_TRUE
(
true
)
<<
"Intentional success"
;
EXPECT_NONFATAL_FAILURE
(
EXPECT_TRUE
(
false
)
<<
"Intentional failure #1."
,
"Intentional failure #1."
);
EXPECT_NONFATAL_FAILURE
(
EXPECT_TRUE
(
false
)
<<
"Intentional failure #2."
,
"Intentional failure #2."
);
EXPECT_TRUE
(
2
>
1
);
// NOLINT
EXPECT_NONFATAL_FAILURE
(
EXPECT_TRUE
(
2
<
1
),
"Value of: 2 < 1
\n
"
...
...
@@ -4288,9 +4397,14 @@ TEST(ExpectTest, ExpectTrueWithAssertionResult) {
"Expected: true"
);
}
// Tests EXPECT_FALSE.
// Tests EXPECT_FALSE
with a streamed message
.
TEST
(
ExpectTest
,
EXPECT_FALSE
)
{
EXPECT_FALSE
(
2
<
1
);
// NOLINT
EXPECT_FALSE
(
false
)
<<
"Intentional success"
;
EXPECT_NONFATAL_FAILURE
(
EXPECT_FALSE
(
true
)
<<
"Intentional failure #1."
,
"Intentional failure #1."
);
EXPECT_NONFATAL_FAILURE
(
EXPECT_FALSE
(
true
)
<<
"Intentional failure #2."
,
"Intentional failure #2."
);
EXPECT_NONFATAL_FAILURE
(
EXPECT_FALSE
(
2
>
1
),
"Value of: 2 > 1
\n
"
" Actual: true
\n
"
...
...
@@ -4564,7 +4678,7 @@ TEST(StreamableTest, BasicIoManip) {
void
AddFailureHelper
(
bool
*
aborted
)
{
*
aborted
=
true
;
ADD_FAILURE
()
<<
"
Failure
"
;
ADD_FAILURE
()
<<
"
Intentional failure.
"
;
*
aborted
=
false
;
}
...
...
@@ -4572,7 +4686,7 @@ void AddFailureHelper(bool* aborted) {
TEST
(
MacroTest
,
ADD_FAILURE
)
{
bool
aborted
=
true
;
EXPECT_NONFATAL_FAILURE
(
AddFailureHelper
(
&
aborted
),
"
Failure
"
);
"
Intentional failure.
"
);
EXPECT_FALSE
(
aborted
);
}
...
...
@@ -4605,7 +4719,6 @@ TEST(MacroTest, SUCCEED) {
SUCCEED
()
<<
"Explicit success."
;
}
// Tests for EXPECT_EQ() and ASSERT_EQ().
//
// These tests fail *intentionally*, s.t. the failure messages can be
...
...
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