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
8bdb31e0
Commit
8bdb31e0
authored
Jul 14, 2009
by
zhanyong.wan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adds the command line flags needed for test shuffling. Most code by Josh Kelley.
parent
89080477
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
249 additions
and
12 deletions
+249
-12
gtest.h
include/gtest/gtest.h
+9
-0
SConscript
scons/SConscript
+1
-1
gtest-internal-inl.h
src/gtest-internal-inl.h
+46
-1
gtest.cc
src/gtest.cc
+50
-7
gtest_help_test.py
test/gtest_help_test.py
+2
-0
gtest_unittest.cc
test/gtest_unittest.cc
+141
-3
No files found.
include/gtest/gtest.h
View file @
8bdb31e0
...
...
@@ -119,6 +119,9 @@ GTEST_DECLARE_string_(output);
// test.
GTEST_DECLARE_bool_
(
print_time
);
// This flag specifies the random number seed.
GTEST_DECLARE_int32_
(
random_seed
);
// This flag sets how many times the tests are repeated. The default value
// is 1. If the value is -1 the tests are repeating forever.
GTEST_DECLARE_int32_
(
repeat
);
...
...
@@ -127,6 +130,9 @@ GTEST_DECLARE_int32_(repeat);
// stack frames in failure stack traces.
GTEST_DECLARE_bool_
(
show_internal_stack_frames
);
// When this flag is specified, tests' order is randomized on every run.
GTEST_DECLARE_bool_
(
shuffle
);
// This flag specifies the maximum number of stack frames to be
// printed in a failure message.
GTEST_DECLARE_int32_
(
stack_trace_depth
);
...
...
@@ -798,6 +804,9 @@ class UnitTest {
// or NULL if no test is running.
const
TestInfo
*
current_test_info
()
const
;
// Returns the random seed used at the start of the current test run.
int
random_seed
()
const
;
#if GTEST_HAS_PARAM_TEST
// Returns the ParameterizedTestCaseRegistry object used to keep track of
// value-parameterized tests and instantiate and register them.
...
...
scons/SConscript
View file @
8bdb31e0
...
...
@@ -332,7 +332,7 @@ GtestBinary(env_without_rtti, 'gtest_no_rtti_test', None,
# Use the GTEST_BUILD_SAMPLES build variable to control building of samples.
# In your SConstruct file, add
# vars = Variables()
# vars.Add(BoolVariable('GTEST_BUILD_SAMPLES', 'Build samples',
Tru
e))
# vars.Add(BoolVariable('GTEST_BUILD_SAMPLES', 'Build samples',
Fals
e))
# my_environment = Environment(variables = vars, ...)
# Then, in the command line use GTEST_BUILD_SAMPLES=true to enable them.
if
env
.
get
(
'GTEST_BUILD_SAMPLES'
,
False
):
...
...
src/gtest-internal-inl.h
View file @
8bdb31e0
...
...
@@ -87,9 +87,42 @@ const char kFilterFlag[] = "filter";
const
char
kListTestsFlag
[]
=
"list_tests"
;
const
char
kOutputFlag
[]
=
"output"
;
const
char
kPrintTimeFlag
[]
=
"print_time"
;
const
char
kRandomSeedFlag
[]
=
"random_seed"
;
const
char
kRepeatFlag
[]
=
"repeat"
;
const
char
kShuffleFlag
[]
=
"shuffle"
;
const
char
kThrowOnFailureFlag
[]
=
"throw_on_failure"
;
// A valid random seed must be in [1, kMaxRandomSeed].
const
unsigned
int
kMaxRandomSeed
=
99999
;
// Returns the current time in milliseconds.
TimeInMillis
GetTimeInMillis
();
// Returns a random seed in range [1, kMaxRandomSeed] based on the
// given --gtest_random_seed flag value.
inline
int
GetRandomSeedFromFlag
(
Int32
random_seed_flag
)
{
const
unsigned
int
raw_seed
=
(
random_seed_flag
==
0
)
?
static_cast
<
unsigned
int
>
(
GetTimeInMillis
())
:
static_cast
<
unsigned
int
>
(
random_seed_flag
);
// Normalizes the actual seed to range [1, kMaxRandomSeed] such that
// it's easy to type.
const
int
normalized_seed
=
static_cast
<
int
>
((
raw_seed
-
1U
)
%
kMaxRandomSeed
)
+
1
;
return
normalized_seed
;
}
// Returns the first valid random seed after 'seed'. The behavior is
// undefined if 'seed' is invalid. The seed after kMaxRandomSeed is
// considered to be 1.
inline
int
GetNextRandomSeed
(
int
seed
)
{
GTEST_CHECK_
(
1
<=
seed
&&
seed
<=
kMaxRandomSeed
)
<<
"Invalid random seed "
<<
seed
<<
" - must be in [1, "
<<
kMaxRandomSeed
<<
"]."
;
const
int
next_seed
=
seed
+
1
;
return
(
next_seed
>
kMaxRandomSeed
)
?
1
:
next_seed
;
}
// This class saves the values of all Google Test flags in its c'tor, and
// restores them in its d'tor.
class
GTestFlagSaver
{
...
...
@@ -107,7 +140,9 @@ class GTestFlagSaver {
list_tests_
=
GTEST_FLAG
(
list_tests
);
output_
=
GTEST_FLAG
(
output
);
print_time_
=
GTEST_FLAG
(
print_time
);
random_seed_
=
GTEST_FLAG
(
random_seed
);
repeat_
=
GTEST_FLAG
(
repeat
);
shuffle_
=
GTEST_FLAG
(
shuffle
);
throw_on_failure_
=
GTEST_FLAG
(
throw_on_failure
);
}
...
...
@@ -124,7 +159,9 @@ class GTestFlagSaver {
GTEST_FLAG
(
list_tests
)
=
list_tests_
;
GTEST_FLAG
(
output
)
=
output_
;
GTEST_FLAG
(
print_time
)
=
print_time_
;
GTEST_FLAG
(
random_seed
)
=
random_seed_
;
GTEST_FLAG
(
repeat
)
=
repeat_
;
GTEST_FLAG
(
shuffle
)
=
shuffle_
;
GTEST_FLAG
(
throw_on_failure
)
=
throw_on_failure_
;
}
private
:
...
...
@@ -141,7 +178,9 @@ class GTestFlagSaver {
String
output_
;
bool
print_time_
;
bool
pretty_
;
internal
::
Int32
random_seed_
;
internal
::
Int32
repeat_
;
bool
shuffle_
;
bool
throw_on_failure_
;
}
GTEST_ATTRIBUTE_UNUSED_
;
...
...
@@ -884,6 +923,9 @@ class UnitTestImpl {
friend
class
ReplaceDeathTestFactory
;
#endif // GTEST_HAS_DEATH_TEST
// Gets the random seed used at the start of the current test run.
int
random_seed
()
const
{
return
random_seed_
;
}
private
:
friend
class
::
testing
::
UnitTest
;
...
...
@@ -932,7 +974,7 @@ class UnitTestImpl {
// This points to the TestCase for the currently running test. It
// changes as Google Test goes through one test case after another.
// When no test is running, this is set to NULL and Google Test
// stores assertion results in ad_hoc_test_result_. Initally NULL.
// stores assertion results in ad_hoc_test_result_. Init
i
ally NULL.
TestCase
*
current_test_case_
;
// This points to the TestInfo for the currently running test. It
...
...
@@ -963,6 +1005,9 @@ class UnitTestImpl {
// desired.
OsStackTraceGetterInterface
*
os_stack_trace_getter_
;
// The random number seed used at the beginning of the test run.
int
random_seed_
;
// How long the test took to run, in milliseconds.
TimeInMillis
elapsed_time_
;
...
...
src/gtest.cc
View file @
8bdb31e0
...
...
@@ -218,11 +218,28 @@ GTEST_DEFINE_bool_(
" should display elapsed time in text output."
);
GTEST_DEFINE_int32_
(
random_seed
,
internal
::
Int32FromGTestEnv
(
"random_seed"
,
0
),
"Random number seed to use when shuffling test orders. Must be in range "
"[1, 99999], or 0 to use a seed based on the current time."
);
GTEST_DEFINE_int32_
(
repeat
,
internal
::
Int32FromGTestEnv
(
"repeat"
,
1
),
"How many times to repeat each test. Specify a negative number "
"for repeating forever. Useful for shaking out flaky tests."
);
GTEST_DEFINE_bool_
(
show_internal_stack_frames
,
false
,
"True iff "
GTEST_NAME_
" should include internal stack frames when "
"printing test failure stack traces."
);
GTEST_DEFINE_bool_
(
shuffle
,
internal
::
BoolFromGTestEnv
(
"shuffle"
,
false
),
"True iff "
GTEST_NAME_
" should randomize tests' order on every run."
);
GTEST_DEFINE_int32_
(
stack_trace_depth
,
internal
::
Int32FromGTestEnv
(
"stack_trace_depth"
,
kMaxStackTraceDepth
),
...
...
@@ -230,11 +247,6 @@ GTEST_DEFINE_int32_(
"assertion fails. The valid range is 0 through 100, inclusive."
);
GTEST_DEFINE_bool_
(
show_internal_stack_frames
,
false
,
"True iff "
GTEST_NAME_
" should include internal stack frames when "
"printing test failure stack traces."
);
GTEST_DEFINE_bool_
(
throw_on_failure
,
internal
::
BoolFromGTestEnv
(
"throw_on_failure"
,
false
),
"When this flag is specified, a failed assertion will throw an exception "
...
...
@@ -774,9 +786,10 @@ String UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) {
return
String
(
""
);
}
static
TimeInMillis
GetTimeInMillis
()
{
// Returns the current time in milliseconds.
TimeInMillis
GetTimeInMillis
()
{
#if defined(_WIN32_WCE) || defined(__BORLANDC__)
// Difference between 1970-01-01 and 1601-01-01 in miliseconds.
// Difference between 1970-01-01 and 1601-01-01 in mil
l
iseconds.
// http://analogous.blogspot.com/2005/04/epoch.html
const
TimeInMillis
kJavaEpochToWinFileTimeDelta
=
static_cast
<
TimeInMillis
>
(
116444736UL
)
*
100000UL
;
...
...
@@ -2719,6 +2732,12 @@ void PrettyUnitTestResultPrinter::OnUnitTestStart(const UnitTest& unit_test) {
internal
::
posix
::
GetEnv
(
kTestTotalShards
));
}
if
(
GTEST_FLAG
(
shuffle
))
{
ColoredPrintf
(
COLOR_YELLOW
,
"Note: Randomizing tests' orders with a seed of %d .
\n
"
,
unit_test
.
random_seed
());
}
ColoredPrintf
(
COLOR_GREEN
,
"[==========] "
);
printf
(
"Running %s from %s.
\n
"
,
FormatTestCount
(
unit_test
.
test_to_run_count
()).
c_str
(),
...
...
@@ -3193,6 +3212,9 @@ void XmlUnitTestResultPrinter::PrintXmlUnitTest(FILE* out,
unit_test
.
failed_test_count
(),
unit_test
.
disabled_test_count
(),
internal
::
FormatTimeInMillisAsSeconds
(
unit_test
.
elapsed_time
()));
if
(
GTEST_FLAG
(
shuffle
))
{
fprintf
(
out
,
"random_seed=
\"
%d
\"
"
,
unit_test
.
random_seed
());
}
fprintf
(
out
,
"name=
\"
AllTests
\"
>
\n
"
);
for
(
int
i
=
0
;
i
<
unit_test
.
total_test_case_count
();
++
i
)
PrintXmlTestCase
(
out
,
*
unit_test
.
GetTestCase
(
i
));
...
...
@@ -3539,6 +3561,9 @@ const TestInfo* UnitTest::current_test_info() const {
return
impl_
->
current_test_info
();
}
// Returns the random seed used at the start of the current test run.
int
UnitTest
::
random_seed
()
const
{
return
impl_
->
random_seed
();
}
#if GTEST_HAS_PARAM_TEST
// Returns ParameterizedTestCaseRegistry object used to keep track of
// value-parameterized tests and instantiate and register them.
...
...
@@ -3604,6 +3629,7 @@ UnitTestImpl::UnitTestImpl(UnitTest* parent)
ad_hoc_test_result_
(),
result_printer_
(
NULL
),
os_stack_trace_getter_
(
NULL
),
random_seed_
(
0
),
#if GTEST_HAS_DEATH_TEST
elapsed_time_
(
0
),
internal_run_death_test_flag_
(
NULL
),
...
...
@@ -3747,6 +3773,9 @@ int UnitTestImpl::RunAllTests() {
return
0
;
}
random_seed_
=
GTEST_FLAG
(
shuffle
)
?
GetRandomSeedFromFlag
(
GTEST_FLAG
(
random_seed
))
:
0
;
// True iff at least one test has failed.
bool
failed
=
false
;
...
...
@@ -3796,6 +3825,11 @@ int UnitTestImpl::RunAllTests() {
failed
=
true
;
}
ClearResult
();
if
(
GTEST_FLAG
(
shuffle
))
{
// Picks a new random seed for each run.
random_seed_
=
GetNextRandomSeed
(
random_seed_
);
}
}
// Returns 0 if all tests passed, or 1 other wise.
...
...
@@ -4262,8 +4296,15 @@ static const char kColorEncodedHelpMessage[] =
" matches any substring; ':' separates two patterns.
\n
"
" @G--"
GTEST_FLAG_PREFIX_
"also_run_disabled_tests@D
\n
"
" Run all disabled tests too.
\n
"
"
\n
"
"Test Execution:
\n
"
" @G--"
GTEST_FLAG_PREFIX_
"repeat=@Y[COUNT]@D
\n
"
" Run the tests repeatedly; use a negative count to repeat forever.
\n
"
" @G--"
GTEST_FLAG_PREFIX_
"shuffle
\n
"
" Randomize tests' orders on every run. To be implemented.
\n
"
" @G--"
GTEST_FLAG_PREFIX_
"random_seed=@Y[NUMBER]@D
\n
"
" Random number seed to use for shuffling test orders (between 1 and
\n
"
" 99999, or 0 to use a seed based on the current time).
\n
"
"
\n
"
"Test Output:
\n
"
" @G--"
GTEST_FLAG_PREFIX_
"color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D
\n
"
...
...
@@ -4332,7 +4373,9 @@ void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) {
ParseBoolFlag
(
arg
,
kListTestsFlag
,
&
GTEST_FLAG
(
list_tests
))
||
ParseStringFlag
(
arg
,
kOutputFlag
,
&
GTEST_FLAG
(
output
))
||
ParseBoolFlag
(
arg
,
kPrintTimeFlag
,
&
GTEST_FLAG
(
print_time
))
||
ParseInt32Flag
(
arg
,
kRandomSeedFlag
,
&
GTEST_FLAG
(
random_seed
))
||
ParseInt32Flag
(
arg
,
kRepeatFlag
,
&
GTEST_FLAG
(
repeat
))
||
ParseBoolFlag
(
arg
,
kShuffleFlag
,
&
GTEST_FLAG
(
shuffle
))
||
ParseBoolFlag
(
arg
,
kThrowOnFailureFlag
,
&
GTEST_FLAG
(
throw_on_failure
))
)
{
// Yes. Shift the remainder of the argv list left by one. Note
...
...
test/gtest_help_test.py
View file @
8bdb31e0
...
...
@@ -57,6 +57,8 @@ HELP_REGEX = re.compile(
FLAG_PREFIX
+
r'filter=.*'
+
FLAG_PREFIX
+
r'also_run_disabled_tests.*'
+
FLAG_PREFIX
+
r'repeat=.*'
+
FLAG_PREFIX
+
r'shuffle.*'
+
FLAG_PREFIX
+
r'random_seed=.*'
+
FLAG_PREFIX
+
r'color=.*'
+
FLAG_PREFIX
+
r'print_time.*'
+
FLAG_PREFIX
+
r'output=.*'
+
...
...
test/gtest_unittest.cc
View file @
8bdb31e0
...
...
@@ -46,8 +46,10 @@ TEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) {
||
testing
::
GTEST_FLAG
(
list_tests
)
||
testing
::
GTEST_FLAG
(
output
)
!=
"unknown"
||
testing
::
GTEST_FLAG
(
print_time
)
||
testing
::
GTEST_FLAG
(
random_seed
)
||
testing
::
GTEST_FLAG
(
repeat
)
>
0
||
testing
::
GTEST_FLAG
(
show_internal_stack_frames
)
||
testing
::
GTEST_FLAG
(
shuffle
)
||
testing
::
GTEST_FLAG
(
stack_trace_depth
)
>
0
||
testing
::
GTEST_FLAG
(
throw_on_failure
);
EXPECT_TRUE
(
dummy
||
!
dummy
);
// Suppresses warning that dummy is unused.
...
...
@@ -142,8 +144,10 @@ using testing::GTEST_FLAG(filter);
using
testing
::
GTEST_FLAG
(
list_tests
);
using
testing
::
GTEST_FLAG
(
output
);
using
testing
::
GTEST_FLAG
(
print_time
);
using
testing
::
GTEST_FLAG
(
random_seed
);
using
testing
::
GTEST_FLAG
(
repeat
);
using
testing
::
GTEST_FLAG
(
show_internal_stack_frames
);
using
testing
::
GTEST_FLAG
(
shuffle
);
using
testing
::
GTEST_FLAG
(
stack_trace_depth
);
using
testing
::
GTEST_FLAG
(
throw_on_failure
);
using
testing
::
IsNotSubstring
;
...
...
@@ -158,6 +162,7 @@ using testing::TPRT_FATAL_FAILURE;
using
testing
::
TPRT_NONFATAL_FAILURE
;
using
testing
::
TPRT_SUCCESS
;
using
testing
::
UnitTest
;
using
testing
::
internal
::
kMaxRandomSeed
;
using
testing
::
internal
::
kTestTypeIdInGoogleTest
;
using
testing
::
internal
::
AppendUserMessage
;
using
testing
::
internal
::
CodePointToUtf8
;
...
...
@@ -165,6 +170,8 @@ using testing::internal::EqFailure;
using
testing
::
internal
::
FloatingPoint
;
using
testing
::
internal
::
GetCurrentOsStackTraceExceptTop
;
using
testing
::
internal
::
GetFailedPartCount
;
using
testing
::
internal
::
GetNextRandomSeed
;
using
testing
::
internal
::
GetRandomSeedFromFlag
;
using
testing
::
internal
::
GetTestTypeId
;
using
testing
::
internal
::
GetTypeId
;
using
testing
::
internal
::
GetUnitTestImpl
;
...
...
@@ -187,6 +194,43 @@ using testing::internal::WideStringToUtf8;
// This line tests that we can define tests in an unnamed namespace.
namespace
{
TEST
(
GetRandomSeedFromFlagTest
,
HandlesZero
)
{
const
int
seed
=
GetRandomSeedFromFlag
(
0
);
EXPECT_LE
(
1
,
seed
);
EXPECT_LE
(
seed
,
static_cast
<
int
>
(
kMaxRandomSeed
));
}
TEST
(
GetRandomSeedFromFlagTest
,
PreservesValidSeed
)
{
EXPECT_EQ
(
1
,
GetRandomSeedFromFlag
(
1
));
EXPECT_EQ
(
2
,
GetRandomSeedFromFlag
(
2
));
EXPECT_EQ
(
kMaxRandomSeed
-
1
,
GetRandomSeedFromFlag
(
kMaxRandomSeed
-
1
));
EXPECT_EQ
(
static_cast
<
int
>
(
kMaxRandomSeed
),
GetRandomSeedFromFlag
(
kMaxRandomSeed
));
}
TEST
(
GetRandomSeedFromFlagTest
,
NormalizesInvalidSeed
)
{
const
int
seed1
=
GetRandomSeedFromFlag
(
-
1
);
EXPECT_LE
(
1
,
seed1
);
EXPECT_LE
(
seed1
,
static_cast
<
int
>
(
kMaxRandomSeed
));
const
int
seed2
=
GetRandomSeedFromFlag
(
kMaxRandomSeed
+
1
);
EXPECT_LE
(
1
,
seed2
);
EXPECT_LE
(
seed2
,
static_cast
<
int
>
(
kMaxRandomSeed
));
}
TEST
(
GetNextRandomSeedTest
,
WorksForValidInput
)
{
EXPECT_EQ
(
2
,
GetNextRandomSeed
(
1
));
EXPECT_EQ
(
3
,
GetNextRandomSeed
(
2
));
EXPECT_EQ
(
static_cast
<
int
>
(
kMaxRandomSeed
),
GetNextRandomSeed
(
kMaxRandomSeed
-
1
));
EXPECT_EQ
(
1
,
GetNextRandomSeed
(
kMaxRandomSeed
));
// We deliberately don't test GetNextRandomSeed() with invalid
// inputs, as that requires death tests, which are expensive. This
// is fine as GetNextRandomSeed() is internal and has a
// straightforward definition.
}
static
void
ClearCurrentTestPartResults
()
{
TestResultAccessor
::
ClearTestPartResults
(
GetUnitTestImpl
()
->
current_test_result
());
...
...
@@ -1460,7 +1504,9 @@ class GTestFlagSaverTest : public Test {
GTEST_FLAG
(
list_tests
)
=
false
;
GTEST_FLAG
(
output
)
=
""
;
GTEST_FLAG
(
print_time
)
=
true
;
GTEST_FLAG
(
random_seed
)
=
0
;
GTEST_FLAG
(
repeat
)
=
1
;
GTEST_FLAG
(
shuffle
)
=
false
;
GTEST_FLAG
(
throw_on_failure
)
=
false
;
}
...
...
@@ -1483,7 +1529,9 @@ class GTestFlagSaverTest : public Test {
EXPECT_FALSE
(
GTEST_FLAG
(
list_tests
));
EXPECT_STREQ
(
""
,
GTEST_FLAG
(
output
).
c_str
());
EXPECT_TRUE
(
GTEST_FLAG
(
print_time
));
EXPECT_EQ
(
0
,
GTEST_FLAG
(
random_seed
));
EXPECT_EQ
(
1
,
GTEST_FLAG
(
repeat
));
EXPECT_FALSE
(
GTEST_FLAG
(
shuffle
));
EXPECT_FALSE
(
GTEST_FLAG
(
throw_on_failure
));
GTEST_FLAG
(
also_run_disabled_tests
)
=
true
;
...
...
@@ -1495,7 +1543,9 @@ class GTestFlagSaverTest : public Test {
GTEST_FLAG
(
list_tests
)
=
true
;
GTEST_FLAG
(
output
)
=
"xml:foo.xml"
;
GTEST_FLAG
(
print_time
)
=
false
;
GTEST_FLAG
(
random_seed
)
=
1
;
GTEST_FLAG
(
repeat
)
=
100
;
GTEST_FLAG
(
shuffle
)
=
true
;
GTEST_FLAG
(
throw_on_failure
)
=
true
;
}
private
:
...
...
@@ -4657,7 +4707,9 @@ struct Flags {
list_tests
(
false
),
output
(
""
),
print_time
(
true
),
random_seed
(
0
),
repeat
(
1
),
shuffle
(
false
),
throw_on_failure
(
false
)
{}
// Factory methods.
...
...
@@ -4726,6 +4778,14 @@ struct Flags {
return
flags
;
}
// Creates a Flags struct where the gtest_random_seed flag has
// the given value.
static
Flags
RandomSeed
(
Int32
random_seed
)
{
Flags
flags
;
flags
.
random_seed
=
random_seed
;
return
flags
;
}
// Creates a Flags struct where the gtest_repeat flag has the given
// value.
static
Flags
Repeat
(
Int32
repeat
)
{
...
...
@@ -4734,6 +4794,14 @@ struct Flags {
return
flags
;
}
// Creates a Flags struct where the gtest_shuffle flag has
// the given value.
static
Flags
Shuffle
(
bool
shuffle
)
{
Flags
flags
;
flags
.
shuffle
=
shuffle
;
return
flags
;
}
// Creates a Flags struct where the gtest_throw_on_failure flag has
// the given value.
static
Flags
ThrowOnFailure
(
bool
throw_on_failure
)
{
...
...
@@ -4751,7 +4819,9 @@ struct Flags {
bool
list_tests
;
const
char
*
output
;
bool
print_time
;
Int32
random_seed
;
Int32
repeat
;
bool
shuffle
;
bool
throw_on_failure
;
};
...
...
@@ -4768,7 +4838,9 @@ class InitGoogleTestTest : public Test {
GTEST_FLAG
(
list_tests
)
=
false
;
GTEST_FLAG
(
output
)
=
""
;
GTEST_FLAG
(
print_time
)
=
true
;
GTEST_FLAG
(
random_seed
)
=
0
;
GTEST_FLAG
(
repeat
)
=
1
;
GTEST_FLAG
(
shuffle
)
=
false
;
GTEST_FLAG
(
throw_on_failure
)
=
false
;
}
...
...
@@ -4794,7 +4866,9 @@ class InitGoogleTestTest : public Test {
EXPECT_EQ
(
expected
.
list_tests
,
GTEST_FLAG
(
list_tests
));
EXPECT_STREQ
(
expected
.
output
,
GTEST_FLAG
(
output
).
c_str
());
EXPECT_EQ
(
expected
.
print_time
,
GTEST_FLAG
(
print_time
));
EXPECT_EQ
(
expected
.
random_seed
,
GTEST_FLAG
(
random_seed
));
EXPECT_EQ
(
expected
.
repeat
,
GTEST_FLAG
(
repeat
));
EXPECT_EQ
(
expected
.
shuffle
,
GTEST_FLAG
(
shuffle
));
EXPECT_EQ
(
expected
.
throw_on_failure
,
GTEST_FLAG
(
throw_on_failure
));
}
...
...
@@ -4901,7 +4975,7 @@ TEST_F(InitGoogleTestTest, FilterNonEmpty) {
}
// Tests parsing --gtest_break_on_failure.
TEST_F
(
InitGoogleTestTest
,
BreakOnFailure
NoDef
)
{
TEST_F
(
InitGoogleTestTest
,
BreakOnFailure
WithoutValue
)
{
const
char
*
argv
[]
=
{
"foo.exe"
,
"--gtest_break_on_failure"
,
...
...
@@ -5117,7 +5191,7 @@ TEST_F(InitGoogleTestTest, ListTestsFalse_f) {
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
::
ListTests
(
false
));
}
// Tests parsing --gtest_
break_on_failure
=F.
// Tests parsing --gtest_
list_tests
=F.
TEST_F
(
InitGoogleTestTest
,
ListTestsFalse_F
)
{
const
char
*
argv
[]
=
{
"foo.exe"
,
...
...
@@ -5278,6 +5352,22 @@ TEST_F(InitGoogleTestTest, PrintTimeFalse_F) {
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
::
PrintTime
(
false
));
}
// Tests parsing --gtest_random_seed=number
TEST_F
(
InitGoogleTestTest
,
RandomSeed
)
{
const
char
*
argv
[]
=
{
"foo.exe"
,
"--gtest_random_seed=1000"
,
NULL
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
NULL
};
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
::
RandomSeed
(
1000
));
}
// Tests parsing --gtest_repeat=number
TEST_F
(
InitGoogleTestTest
,
Repeat
)
{
const
char
*
argv
[]
=
{
...
...
@@ -5342,9 +5432,57 @@ TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFalse) {
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
::
AlsoRunDisabledTests
(
false
));
}
// Tests parsing --gtest_shuffle.
TEST_F
(
InitGoogleTestTest
,
ShuffleWithoutValue
)
{
const
char
*
argv
[]
=
{
"foo.exe"
,
"--gtest_shuffle"
,
NULL
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
NULL
};
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
::
Shuffle
(
true
));
}
// Tests parsing --gtest_shuffle=0.
TEST_F
(
InitGoogleTestTest
,
ShuffleFalse_0
)
{
const
char
*
argv
[]
=
{
"foo.exe"
,
"--gtest_shuffle=0"
,
NULL
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
NULL
};
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
::
Shuffle
(
false
));
}
// Tests parsing a --gtest_shuffle flag that has a "true"
// definition.
TEST_F
(
InitGoogleTestTest
,
ShuffleTrue
)
{
const
char
*
argv
[]
=
{
"foo.exe"
,
"--gtest_shuffle=1"
,
NULL
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
NULL
};
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
::
Shuffle
(
true
));
}
// Tests parsing --gtest_throw_on_failure.
TEST_F
(
InitGoogleTestTest
,
ThrowOnFailure
NoDef
)
{
TEST_F
(
InitGoogleTestTest
,
ThrowOnFailure
WithoutValue
)
{
const
char
*
argv
[]
=
{
"foo.exe"
,
"--gtest_throw_on_failure"
,
...
...
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