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