14b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Copyright 2008, Google Inc.
24b6829f0d28990dd645e16386eb226d0f10c8731shiqian// All rights reserved.
34b6829f0d28990dd645e16386eb226d0f10c8731shiqian//
44b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Redistribution and use in source and binary forms, with or without
54b6829f0d28990dd645e16386eb226d0f10c8731shiqian// modification, are permitted provided that the following conditions are
64b6829f0d28990dd645e16386eb226d0f10c8731shiqian// met:
74b6829f0d28990dd645e16386eb226d0f10c8731shiqian//
84b6829f0d28990dd645e16386eb226d0f10c8731shiqian//     * Redistributions of source code must retain the above copyright
94b6829f0d28990dd645e16386eb226d0f10c8731shiqian// notice, this list of conditions and the following disclaimer.
104b6829f0d28990dd645e16386eb226d0f10c8731shiqian//     * Redistributions in binary form must reproduce the above
114b6829f0d28990dd645e16386eb226d0f10c8731shiqian// copyright notice, this list of conditions and the following disclaimer
124b6829f0d28990dd645e16386eb226d0f10c8731shiqian// in the documentation and/or other materials provided with the
134b6829f0d28990dd645e16386eb226d0f10c8731shiqian// distribution.
144b6829f0d28990dd645e16386eb226d0f10c8731shiqian//     * Neither the name of Google Inc. nor the names of its
154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// contributors may be used to endorse or promote products derived from
164b6829f0d28990dd645e16386eb226d0f10c8731shiqian// this software without specific prior written permission.
174b6829f0d28990dd645e16386eb226d0f10c8731shiqian//
184b6829f0d28990dd645e16386eb226d0f10c8731shiqian// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
194b6829f0d28990dd645e16386eb226d0f10c8731shiqian// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
204b6829f0d28990dd645e16386eb226d0f10c8731shiqian// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
224b6829f0d28990dd645e16386eb226d0f10c8731shiqian// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
234b6829f0d28990dd645e16386eb226d0f10c8731shiqian// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
244b6829f0d28990dd645e16386eb226d0f10c8731shiqian// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
254b6829f0d28990dd645e16386eb226d0f10c8731shiqian// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
264b6829f0d28990dd645e16386eb226d0f10c8731shiqian// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
274b6829f0d28990dd645e16386eb226d0f10c8731shiqian// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
294b6829f0d28990dd645e16386eb226d0f10c8731shiqian//
304b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Author: wan@google.com (Zhanyong Wan)
314b6829f0d28990dd645e16386eb226d0f10c8731shiqian
324b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the --gtest_repeat=number flag.
334b6829f0d28990dd645e16386eb226d0f10c8731shiqian
344b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <stdlib.h>
354b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <iostream>
362620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest.h"
374b6829f0d28990dd645e16386eb226d0f10c8731shiqian
384b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Indicates that this translation unit is part of Google Test's
394b6829f0d28990dd645e16386eb226d0f10c8731shiqian// implementation.  It must come before gtest-internal-inl.h is
404b6829f0d28990dd645e16386eb226d0f10c8731shiqian// included, or there will be a compiler error.  This trick is to
414b6829f0d28990dd645e16386eb226d0f10c8731shiqian// prevent a user from accidentally including gtest-internal-inl.h in
424b6829f0d28990dd645e16386eb226d0f10c8731shiqian// his code.
434cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#define GTEST_IMPLEMENTATION_ 1
444b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "src/gtest-internal-inl.h"
454cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#undef GTEST_IMPLEMENTATION_
464b6829f0d28990dd645e16386eb226d0f10c8731shiqian
474b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace testing {
484b6829f0d28990dd645e16386eb226d0f10c8731shiqian
49e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianGTEST_DECLARE_string_(death_test_style);
50e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianGTEST_DECLARE_string_(filter);
51e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianGTEST_DECLARE_int32_(repeat);
524b6829f0d28990dd645e16386eb226d0f10c8731shiqian
534b6829f0d28990dd645e16386eb226d0f10c8731shiqian}  // namespace testing
544b6829f0d28990dd645e16386eb226d0f10c8731shiqian
554b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::GTEST_FLAG(death_test_style);
564b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::GTEST_FLAG(filter);
574b6829f0d28990dd645e16386eb226d0f10c8731shiqianusing testing::GTEST_FLAG(repeat);
584b6829f0d28990dd645e16386eb226d0f10c8731shiqian
594b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace {
604b6829f0d28990dd645e16386eb226d0f10c8731shiqian
61b5150233bec111306f340bf486a1a0624b3a817eshiqian// We need this when we are testing Google Test itself and therefore
62b5150233bec111306f340bf486a1a0624b3a817eshiqian// cannot use Google Test assertions.
634b6829f0d28990dd645e16386eb226d0f10c8731shiqian#define GTEST_CHECK_INT_EQ_(expected, actual) \
644b6829f0d28990dd645e16386eb226d0f10c8731shiqian  do {\
654b6829f0d28990dd645e16386eb226d0f10c8731shiqian    const int expected_val = (expected);\
664b6829f0d28990dd645e16386eb226d0f10c8731shiqian    const int actual_val = (actual);\
67f6d087b78d230d875bf5d8281112662795044680zhanyong.wan    if (::testing::internal::IsTrue(expected_val != actual_val)) {\
684b6829f0d28990dd645e16386eb226d0f10c8731shiqian      ::std::cout << "Value of: " #actual "\n"\
694b6829f0d28990dd645e16386eb226d0f10c8731shiqian                  << "  Actual: " << actual_val << "\n"\
704b6829f0d28990dd645e16386eb226d0f10c8731shiqian                  << "Expected: " #expected "\n"\
714b6829f0d28990dd645e16386eb226d0f10c8731shiqian                  << "Which is: " << expected_val << "\n";\
725298efaeffba66024a9c530f4b6576dd79a6c5b5vladlosev      ::testing::internal::posix::Abort();\
734b6829f0d28990dd645e16386eb226d0f10c8731shiqian    }\
7493fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev  } while (::testing::internal::AlwaysFalse())
754b6829f0d28990dd645e16386eb226d0f10c8731shiqian
764b6829f0d28990dd645e16386eb226d0f10c8731shiqian
774b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Used for verifying that global environment set-up and tear-down are
784b6829f0d28990dd645e16386eb226d0f10c8731shiqian// inside the gtest_repeat loop.
794b6829f0d28990dd645e16386eb226d0f10c8731shiqian
804b6829f0d28990dd645e16386eb226d0f10c8731shiqianint g_environment_set_up_count = 0;
814b6829f0d28990dd645e16386eb226d0f10c8731shiqianint g_environment_tear_down_count = 0;
824b6829f0d28990dd645e16386eb226d0f10c8731shiqian
834b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass MyEnvironment : public testing::Environment {
844b6829f0d28990dd645e16386eb226d0f10c8731shiqian public:
854b6829f0d28990dd645e16386eb226d0f10c8731shiqian  MyEnvironment() {}
864b6829f0d28990dd645e16386eb226d0f10c8731shiqian  virtual void SetUp() { g_environment_set_up_count++; }
874b6829f0d28990dd645e16386eb226d0f10c8731shiqian  virtual void TearDown() { g_environment_tear_down_count++; }
884b6829f0d28990dd645e16386eb226d0f10c8731shiqian};
894b6829f0d28990dd645e16386eb226d0f10c8731shiqian
904b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A test that should fail.
914b6829f0d28990dd645e16386eb226d0f10c8731shiqian
924b6829f0d28990dd645e16386eb226d0f10c8731shiqianint g_should_fail_count = 0;
934b6829f0d28990dd645e16386eb226d0f10c8731shiqian
944b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(FooTest, ShouldFail) {
954b6829f0d28990dd645e16386eb226d0f10c8731shiqian  g_should_fail_count++;
964b6829f0d28990dd645e16386eb226d0f10c8731shiqian  EXPECT_EQ(0, 1) << "Expected failure.";
974b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
984b6829f0d28990dd645e16386eb226d0f10c8731shiqian
994b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A test that should pass.
1004b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1014b6829f0d28990dd645e16386eb226d0f10c8731shiqianint g_should_pass_count = 0;
1024b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1034b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(FooTest, ShouldPass) {
1044b6829f0d28990dd645e16386eb226d0f10c8731shiqian  g_should_pass_count++;
1054b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
1064b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1074b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A test that contains a thread-safe death test and a fast death
1084b6829f0d28990dd645e16386eb226d0f10c8731shiqian// test.  It should pass.
1094b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1104b6829f0d28990dd645e16386eb226d0f10c8731shiqianint g_death_test_count = 0;
1114b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1124b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(BarDeathTest, ThreadSafeAndFast) {
1134b6829f0d28990dd645e16386eb226d0f10c8731shiqian  g_death_test_count++;
1144b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1154b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_FLAG(death_test_style) = "threadsafe";
1165298efaeffba66024a9c530f4b6576dd79a6c5b5vladlosev  EXPECT_DEATH_IF_SUPPORTED(::testing::internal::posix::Abort(), "");
1174b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1184b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_FLAG(death_test_style) = "fast";
1195298efaeffba66024a9c530f4b6576dd79a6c5b5vladlosev  EXPECT_DEATH_IF_SUPPORTED(::testing::internal::posix::Abort(), "");
1204b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
1214b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1224cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_PARAM_TEST
123f904a612d9444ab36c07a8e619c113432e046f49vladlosevint g_param_test_count = 0;
124f904a612d9444ab36c07a8e619c113432e046f49vladlosev
125f904a612d9444ab36c07a8e619c113432e046f49vladlosevconst int kNumberOfParamTests = 10;
126f904a612d9444ab36c07a8e619c113432e046f49vladlosev
127f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass MyParamTest : public testing::TestWithParam<int> {};
128f904a612d9444ab36c07a8e619c113432e046f49vladlosev
129f904a612d9444ab36c07a8e619c113432e046f49vladlosevTEST_P(MyParamTest, ShouldPass) {
130f904a612d9444ab36c07a8e619c113432e046f49vladlosev  // TODO(vladl@google.com): Make parameter value checking robust
131f904a612d9444ab36c07a8e619c113432e046f49vladlosev  //                         WRT order of tests.
132f904a612d9444ab36c07a8e619c113432e046f49vladlosev  GTEST_CHECK_INT_EQ_(g_param_test_count % kNumberOfParamTests, GetParam());
133f904a612d9444ab36c07a8e619c113432e046f49vladlosev  g_param_test_count++;
134f904a612d9444ab36c07a8e619c113432e046f49vladlosev}
135f904a612d9444ab36c07a8e619c113432e046f49vladlosevINSTANTIATE_TEST_CASE_P(MyParamSequence,
136f904a612d9444ab36c07a8e619c113432e046f49vladlosev                        MyParamTest,
137f904a612d9444ab36c07a8e619c113432e046f49vladlosev                        testing::Range(0, kNumberOfParamTests));
138f904a612d9444ab36c07a8e619c113432e046f49vladlosev#endif  // GTEST_HAS_PARAM_TEST
139f904a612d9444ab36c07a8e619c113432e046f49vladlosev
1404b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Resets the count for each test.
1414b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid ResetCounts() {
1424b6829f0d28990dd645e16386eb226d0f10c8731shiqian  g_environment_set_up_count = 0;
1434b6829f0d28990dd645e16386eb226d0f10c8731shiqian  g_environment_tear_down_count = 0;
1444b6829f0d28990dd645e16386eb226d0f10c8731shiqian  g_should_fail_count = 0;
1454b6829f0d28990dd645e16386eb226d0f10c8731shiqian  g_should_pass_count = 0;
1464b6829f0d28990dd645e16386eb226d0f10c8731shiqian  g_death_test_count = 0;
1474cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_PARAM_TEST
148f904a612d9444ab36c07a8e619c113432e046f49vladlosev  g_param_test_count = 0;
149f904a612d9444ab36c07a8e619c113432e046f49vladlosev#endif  // GTEST_HAS_PARAM_TEST
1504b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
1514b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1524b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Checks that the count for each test is expected.
1534b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid CheckCounts(int expected) {
1544b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(expected, g_environment_set_up_count);
1554b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(expected, g_environment_tear_down_count);
1564b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(expected, g_should_fail_count);
1574b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(expected, g_should_pass_count);
1584b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(expected, g_death_test_count);
1594cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_PARAM_TEST
160f904a612d9444ab36c07a8e619c113432e046f49vladlosev  GTEST_CHECK_INT_EQ_(expected * kNumberOfParamTests, g_param_test_count);
161f904a612d9444ab36c07a8e619c113432e046f49vladlosev#endif  // GTEST_HAS_PARAM_TEST
1624b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
1634b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1644b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the behavior of Google Test when --gtest_repeat is not specified.
1654b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid TestRepeatUnspecified() {
1664b6829f0d28990dd645e16386eb226d0f10c8731shiqian  ResetCounts();
1674b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(1, RUN_ALL_TESTS());
1684b6829f0d28990dd645e16386eb226d0f10c8731shiqian  CheckCounts(1);
1694b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
1704b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1714b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the behavior of Google Test when --gtest_repeat has the given value.
1724b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid TestRepeat(int repeat) {
1734b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_FLAG(repeat) = repeat;
1744b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1754b6829f0d28990dd645e16386eb226d0f10c8731shiqian  ResetCounts();
1764b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(repeat > 0 ? 1 : 0, RUN_ALL_TESTS());
1774b6829f0d28990dd645e16386eb226d0f10c8731shiqian  CheckCounts(repeat);
1784b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
1794b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1804b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using --gtest_repeat when --gtest_filter specifies an empty
1814b6829f0d28990dd645e16386eb226d0f10c8731shiqian// set of tests.
1824b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid TestRepeatWithEmptyFilter(int repeat) {
1834b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_FLAG(repeat) = repeat;
1844b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_FLAG(filter) = "None";
1854b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1864b6829f0d28990dd645e16386eb226d0f10c8731shiqian  ResetCounts();
1874b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(0, RUN_ALL_TESTS());
1884b6829f0d28990dd645e16386eb226d0f10c8731shiqian  CheckCounts(0);
1894b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
1904b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1914b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using --gtest_repeat when --gtest_filter specifies a set of
1924b6829f0d28990dd645e16386eb226d0f10c8731shiqian// successful tests.
1934b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid TestRepeatWithFilterForSuccessfulTests(int repeat) {
1944b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_FLAG(repeat) = repeat;
1954b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_FLAG(filter) = "*-*ShouldFail";
1964b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1974b6829f0d28990dd645e16386eb226d0f10c8731shiqian  ResetCounts();
1984b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(0, RUN_ALL_TESTS());
1994b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(repeat, g_environment_set_up_count);
2004b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(repeat, g_environment_tear_down_count);
2014b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(0, g_should_fail_count);
2024b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(repeat, g_should_pass_count);
2034b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(repeat, g_death_test_count);
2044cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_PARAM_TEST
205f904a612d9444ab36c07a8e619c113432e046f49vladlosev  GTEST_CHECK_INT_EQ_(repeat * kNumberOfParamTests, g_param_test_count);
206f904a612d9444ab36c07a8e619c113432e046f49vladlosev#endif  // GTEST_HAS_PARAM_TEST
2074b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
2084b6829f0d28990dd645e16386eb226d0f10c8731shiqian
2094b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using --gtest_repeat when --gtest_filter specifies a set of
2104b6829f0d28990dd645e16386eb226d0f10c8731shiqian// failed tests.
2114b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid TestRepeatWithFilterForFailedTests(int repeat) {
2124b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_FLAG(repeat) = repeat;
2134b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_FLAG(filter) = "*ShouldFail";
2144b6829f0d28990dd645e16386eb226d0f10c8731shiqian
2154b6829f0d28990dd645e16386eb226d0f10c8731shiqian  ResetCounts();
2164b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(1, RUN_ALL_TESTS());
2174b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(repeat, g_environment_set_up_count);
2184b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(repeat, g_environment_tear_down_count);
2194b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(repeat, g_should_fail_count);
2204b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(0, g_should_pass_count);
2214b6829f0d28990dd645e16386eb226d0f10c8731shiqian  GTEST_CHECK_INT_EQ_(0, g_death_test_count);
2224cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_PARAM_TEST
223f904a612d9444ab36c07a8e619c113432e046f49vladlosev  GTEST_CHECK_INT_EQ_(0, g_param_test_count);
224f904a612d9444ab36c07a8e619c113432e046f49vladlosev#endif  // GTEST_HAS_PARAM_TEST
2254b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
2264b6829f0d28990dd645e16386eb226d0f10c8731shiqian
2274b6829f0d28990dd645e16386eb226d0f10c8731shiqian}  // namespace
2284b6829f0d28990dd645e16386eb226d0f10c8731shiqian
2294b6829f0d28990dd645e16386eb226d0f10c8731shiqianint main(int argc, char **argv) {
2304b6829f0d28990dd645e16386eb226d0f10c8731shiqian  testing::InitGoogleTest(&argc, argv);
2314b6829f0d28990dd645e16386eb226d0f10c8731shiqian  testing::AddGlobalTestEnvironment(new MyEnvironment);
2324b6829f0d28990dd645e16386eb226d0f10c8731shiqian
2334b6829f0d28990dd645e16386eb226d0f10c8731shiqian  TestRepeatUnspecified();
2344b6829f0d28990dd645e16386eb226d0f10c8731shiqian  TestRepeat(0);
2354b6829f0d28990dd645e16386eb226d0f10c8731shiqian  TestRepeat(1);
2364b6829f0d28990dd645e16386eb226d0f10c8731shiqian  TestRepeat(5);
2374b6829f0d28990dd645e16386eb226d0f10c8731shiqian
2384b6829f0d28990dd645e16386eb226d0f10c8731shiqian  TestRepeatWithEmptyFilter(2);
2394b6829f0d28990dd645e16386eb226d0f10c8731shiqian  TestRepeatWithEmptyFilter(3);
2404b6829f0d28990dd645e16386eb226d0f10c8731shiqian
2414b6829f0d28990dd645e16386eb226d0f10c8731shiqian  TestRepeatWithFilterForSuccessfulTests(3);
2424b6829f0d28990dd645e16386eb226d0f10c8731shiqian
2434b6829f0d28990dd645e16386eb226d0f10c8731shiqian  TestRepeatWithFilterForFailedTests(4);
2444b6829f0d28990dd645e16386eb226d0f10c8731shiqian
2454b6829f0d28990dd645e16386eb226d0f10c8731shiqian  // It would be nice to verify that the tests indeed loop forever
2464b6829f0d28990dd645e16386eb226d0f10c8731shiqian  // when GTEST_FLAG(repeat) is negative, but this test will be quite
2474b6829f0d28990dd645e16386eb226d0f10c8731shiqian  // complicated to write.  Since this flag is for interactive
2484b6829f0d28990dd645e16386eb226d0f10c8731shiqian  // debugging only and doesn't affect the normal test result, such a
2494b6829f0d28990dd645e16386eb226d0f10c8731shiqian  // test would be an overkill.
2504b6829f0d28990dd645e16386eb226d0f10c8731shiqian
2514b6829f0d28990dd645e16386eb226d0f10c8731shiqian  printf("PASS\n");
2524b6829f0d28990dd645e16386eb226d0f10c8731shiqian  return 0;
2534b6829f0d28990dd645e16386eb226d0f10c8731shiqian}
254