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