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