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