1dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Copyright 2008, Google Inc.
2dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// All rights reserved.
3dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
4dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Redistribution and use in source and binary forms, with or without
5dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// modification, are permitted provided that the following conditions are
6dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// met:
7dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
8dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//     * Redistributions of source code must retain the above copyright
9dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// notice, this list of conditions and the following disclaimer.
10dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//     * Redistributions in binary form must reproduce the above
11dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// copyright notice, this list of conditions and the following disclaimer
12dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// in the documentation and/or other materials provided with the
13dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// distribution.
14dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//     * Neither the name of Google Inc. nor the names of its
15dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// contributors may be used to endorse or promote products derived from
16dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// this software without specific prior written permission.
17dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
18dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter//
30dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Author: wan@google.com (Zhanyong Wan)
31dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
32dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests the --gtest_repeat=number flag.
33dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
34dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include <stdlib.h>
35dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include <iostream>
3646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan#include "gtest/gtest.h"
37dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
38dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Indicates that this translation unit is part of Google Test's
39dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// implementation.  It must come before gtest-internal-inl.h is
40dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// included, or there will be a compiler error.  This trick is to
41dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// prevent a user from accidentally including gtest-internal-inl.h in
42dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// his code.
43dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_IMPLEMENTATION_ 1
44dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#include "src/gtest-internal-inl.h"
45dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#undef GTEST_IMPLEMENTATION_
46dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
47dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixternamespace testing {
48dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
49dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterGTEST_DECLARE_string_(death_test_style);
50dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterGTEST_DECLARE_string_(filter);
51dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterGTEST_DECLARE_int32_(repeat);
52dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
53dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}  // namespace testing
54dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
55dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::GTEST_FLAG(death_test_style);
56dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::GTEST_FLAG(filter);
57dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterusing testing::GTEST_FLAG(repeat);
58dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
59dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixternamespace {
60dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
61dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// We need this when we are testing Google Test itself and therefore
62dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// cannot use Google Test assertions.
63dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#define GTEST_CHECK_INT_EQ_(expected, actual) \
64dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  do {\
65dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter    const int expected_val = (expected);\
66dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter    const int actual_val = (actual);\
6746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan    if (::testing::internal::IsTrue(expected_val != actual_val)) {\
68dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter      ::std::cout << "Value of: " #actual "\n"\
69dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                  << "  Actual: " << actual_val << "\n"\
70dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                  << "Expected: " #expected "\n"\
71dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                  << "Which is: " << expected_val << "\n";\
7246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan      ::testing::internal::posix::Abort();\
73dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter    }\
7446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  } while (::testing::internal::AlwaysFalse())
75dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
76dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
77dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Used for verifying that global environment set-up and tear-down are
78dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// inside the gtest_repeat loop.
79dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
80dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterint g_environment_set_up_count = 0;
81dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterint g_environment_tear_down_count = 0;
82dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
83dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass MyEnvironment : public testing::Environment {
84dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter public:
85dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  MyEnvironment() {}
86dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  virtual void SetUp() { g_environment_set_up_count++; }
87dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  virtual void TearDown() { g_environment_tear_down_count++; }
88dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter};
89dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
90dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A test that should fail.
91dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
92dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterint g_should_fail_count = 0;
93dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
94dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FooTest, ShouldFail) {
95dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  g_should_fail_count++;
96dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  EXPECT_EQ(0, 1) << "Expected failure.";
97dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
98dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
99dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A test that should pass.
100dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
101dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterint g_should_pass_count = 0;
102dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
103dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(FooTest, ShouldPass) {
104dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  g_should_pass_count++;
105dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
106dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
107dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// A test that contains a thread-safe death test and a fast death
108dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// test.  It should pass.
109dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
110dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterint g_death_test_count = 0;
111dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
112dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST(BarDeathTest, ThreadSafeAndFast) {
113dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  g_death_test_count++;
114dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
115dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_FLAG(death_test_style) = "threadsafe";
11646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  EXPECT_DEATH_IF_SUPPORTED(::testing::internal::posix::Abort(), "");
117dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
118dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_FLAG(death_test_style) = "fast";
11946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan  EXPECT_DEATH_IF_SUPPORTED(::testing::internal::posix::Abort(), "");
120dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
121dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
122dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#if GTEST_HAS_PARAM_TEST
123dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterint g_param_test_count = 0;
124dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
125dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterconst int kNumberOfParamTests = 10;
126dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
127dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass MyParamTest : public testing::TestWithParam<int> {};
128dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
129dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_P(MyParamTest, ShouldPass) {
130dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // TODO(vladl@google.com): Make parameter value checking robust
131dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  //                         WRT order of tests.
132dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(g_param_test_count % kNumberOfParamTests, GetParam());
133dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  g_param_test_count++;
134dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
135dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterINSTANTIATE_TEST_CASE_P(MyParamSequence,
136dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                        MyParamTest,
137dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter                        testing::Range(0, kNumberOfParamTests));
138dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif  // GTEST_HAS_PARAM_TEST
139dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
140dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Resets the count for each test.
141dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtervoid ResetCounts() {
142dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  g_environment_set_up_count = 0;
143dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  g_environment_tear_down_count = 0;
144dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  g_should_fail_count = 0;
145dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  g_should_pass_count = 0;
146dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  g_death_test_count = 0;
147dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#if GTEST_HAS_PARAM_TEST
148dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  g_param_test_count = 0;
149dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif  // GTEST_HAS_PARAM_TEST
150dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
151dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
152dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Checks that the count for each test is expected.
153dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtervoid CheckCounts(int expected) {
154dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(expected, g_environment_set_up_count);
155dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(expected, g_environment_tear_down_count);
156dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(expected, g_should_fail_count);
157dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(expected, g_should_pass_count);
158dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(expected, g_death_test_count);
159dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#if GTEST_HAS_PARAM_TEST
160dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(expected * kNumberOfParamTests, g_param_test_count);
161dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif  // GTEST_HAS_PARAM_TEST
162dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
163dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
164dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests the behavior of Google Test when --gtest_repeat is not specified.
165dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtervoid TestRepeatUnspecified() {
166dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  ResetCounts();
167dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(1, RUN_ALL_TESTS());
168dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  CheckCounts(1);
169dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
170dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
171dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests the behavior of Google Test when --gtest_repeat has the given value.
172dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtervoid TestRepeat(int repeat) {
173dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_FLAG(repeat) = repeat;
174dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
175dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  ResetCounts();
176dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(repeat > 0 ? 1 : 0, RUN_ALL_TESTS());
177dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  CheckCounts(repeat);
178dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
179dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
180dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests using --gtest_repeat when --gtest_filter specifies an empty
181dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// set of tests.
182dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtervoid TestRepeatWithEmptyFilter(int repeat) {
183dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_FLAG(repeat) = repeat;
184dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_FLAG(filter) = "None";
185dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
186dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  ResetCounts();
187dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(0, RUN_ALL_TESTS());
188dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  CheckCounts(0);
189dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
190dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
191dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests using --gtest_repeat when --gtest_filter specifies a set of
192dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// successful tests.
193dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtervoid TestRepeatWithFilterForSuccessfulTests(int repeat) {
194dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_FLAG(repeat) = repeat;
195dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_FLAG(filter) = "*-*ShouldFail";
196dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
197dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  ResetCounts();
198dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(0, RUN_ALL_TESTS());
199dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(repeat, g_environment_set_up_count);
200dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(repeat, g_environment_tear_down_count);
201dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(0, g_should_fail_count);
202dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(repeat, g_should_pass_count);
203dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(repeat, g_death_test_count);
204dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#if GTEST_HAS_PARAM_TEST
205dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(repeat * kNumberOfParamTests, g_param_test_count);
206dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif  // GTEST_HAS_PARAM_TEST
207dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
208dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
209dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// Tests using --gtest_repeat when --gtest_filter specifies a set of
210dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter// failed tests.
211dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtervoid TestRepeatWithFilterForFailedTests(int repeat) {
212dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_FLAG(repeat) = repeat;
213dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_FLAG(filter) = "*ShouldFail";
214dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
215dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  ResetCounts();
216dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(1, RUN_ALL_TESTS());
217dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(repeat, g_environment_set_up_count);
218dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(repeat, g_environment_tear_down_count);
219dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(repeat, g_should_fail_count);
220dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(0, g_should_pass_count);
221dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(0, g_death_test_count);
222dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#if GTEST_HAS_PARAM_TEST
223dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  GTEST_CHECK_INT_EQ_(0, g_param_test_count);
224dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#endif  // GTEST_HAS_PARAM_TEST
225dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
226dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
227dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}  // namespace
228dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
229dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterint main(int argc, char **argv) {
230dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  testing::InitGoogleTest(&argc, argv);
231dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  testing::AddGlobalTestEnvironment(new MyEnvironment);
232dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
233dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  TestRepeatUnspecified();
234dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  TestRepeat(0);
235dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  TestRepeat(1);
236dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  TestRepeat(5);
237dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
238dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  TestRepeatWithEmptyFilter(2);
239dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  TestRepeatWithEmptyFilter(3);
240dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
241dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  TestRepeatWithFilterForSuccessfulTests(3);
242dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
243dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  TestRepeatWithFilterForFailedTests(4);
244dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
245dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // It would be nice to verify that the tests indeed loop forever
246dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // when GTEST_FLAG(repeat) is negative, but this test will be quite
247dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // complicated to write.  Since this flag is for interactive
248dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // debugging only and doesn't affect the normal test result, such a
249dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  // test would be an overkill.
250dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter
251dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  printf("PASS\n");
252dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter  return 0;
253dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter}
254