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