1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright 2009 Google Inc. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Redistribution and use in source and binary forms, with or without 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// modification, are permitted provided that the following conditions are 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// met: 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Redistributions of source code must retain the above copyright 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// notice, this list of conditions and the following disclaimer. 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Redistributions in binary form must reproduce the above 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// copyright notice, this list of conditions and the following disclaimer 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// in the documentation and/or other materials provided with the 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// distribution. 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Neither the name of Google Inc. nor the names of its 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// contributors may be used to endorse or promote products derived from 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// this software without specific prior written permission. 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Author: vladl@google.com (Vlad Losev) 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The Google C++ Testing Framework (Google Test) 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This file verifies Google Test event listeners receive events at the 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// right times. 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "gtest/gtest.h" 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::AddGlobalTestEnvironment; 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::Environment; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::InitGoogleTest; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::Test; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::TestCase; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::TestEventListener; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::TestInfo; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::TestPartResult; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::UnitTest; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::internal::String; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Used by tests to register their events. 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::vector<String>* g_events = NULL; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace testing { 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace internal { 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass EventRecordingListener : public TestEventListener { 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EventRecordingListener(const char* name) : name_(name) {} 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnTestProgramStart")); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int iteration) { 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Message message; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch message << GetFullMethodName("OnTestIterationStart") 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << "(" << iteration << ")"; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(message.GetString()); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) { 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpStart")); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) { 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpEnd")); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnTestCaseStart(const TestCase& /*test_case*/) { 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnTestCaseStart")); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnTestStart(const TestInfo& /*test_info*/) { 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnTestStart")); 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) { 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnTestPartResult")); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnTestEnd(const TestInfo& /*test_info*/) { 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnTestEnd")); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnTestCaseEnd(const TestCase& /*test_case*/) { 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnTestCaseEnd")); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) { 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownStart")); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) { 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownEnd")); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int iteration) { 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Message message; 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch message << GetFullMethodName("OnTestIterationEnd") 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << "(" << iteration << ")"; 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(message.GetString()); 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) { 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(GetFullMethodName("OnTestProgramEnd")); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch String GetFullMethodName(const char* name) { 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Message message; 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch message << name_ << "." << name; 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return message.GetString(); 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch String name_; 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass EnvironmentInvocationCatcher : public Environment { 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(String("Environment::SetUp")); 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TearDown() { 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(String("Environment::TearDown")); 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ListenerTest : public Test { 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void SetUpTestCase() { 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(String("ListenerTest::SetUpTestCase")); 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void TearDownTestCase() { 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(String("ListenerTest::TearDownTestCase")); 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(String("ListenerTest::SetUp")); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TearDown() { 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(String("ListenerTest::TearDown")); 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ListenerTest, DoesFoo) { 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Test execution order within a test case is not guaranteed so we are not 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // recording the test name. 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(String("ListenerTest::* Test Body")); 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SUCCEED(); // Triggers OnTestPartResult. 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ListenerTest, DoesBar) { 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events->push_back(String("ListenerTest::* Test Body")); 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SUCCEED(); // Triggers OnTestPartResult. 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace internal 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace testing 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::internal::EnvironmentInvocationCatcher; 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::internal::EventRecordingListener; 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid VerifyResults(const std::vector<String>& data, 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* const* expected_data, 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int expected_data_size) { 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int actual_size = data.size(); 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If the following assertion fails, a new entry will be appended to 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // data. Hence we save data.size() first. 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(expected_data_size, actual_size); 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Compares the common prefix. 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int shorter_size = expected_data_size <= actual_size ? 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch expected_data_size : actual_size; 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int i = 0; 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (; i < shorter_size; ++i) { 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_STREQ(expected_data[i], data[i].c_str()) 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << "at position " << i; 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Prints extra elements in the actual data. 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (; i < actual_size; ++i) { 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch printf(" Actual event #%d: %s\n", i, data[i].c_str()); 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint main(int argc, char **argv) { 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<String> events; 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_events = &events; 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch InitGoogleTest(&argc, argv); 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UnitTest::GetInstance()->listeners().Append( 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new EventRecordingListener("1st")); 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UnitTest::GetInstance()->listeners().Append( 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new EventRecordingListener("2nd")); 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddGlobalTestEnvironment(new EnvironmentInvocationCatcher); 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTEST_CHECK_(events.size() == 0) 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch << "AddGlobalTestEnvironment should not generate any events itself."; 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ::testing::GTEST_FLAG(repeat) = 2; 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ret_val = RUN_ALL_TESTS(); 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* const expected_events[] = { 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestProgramStart", 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestProgramStart", 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestIterationStart(0)", 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestIterationStart(0)", 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnEnvironmentsSetUpStart", 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnEnvironmentsSetUpStart", 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Environment::SetUp", 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnEnvironmentsSetUpEnd", 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnEnvironmentsSetUpEnd", 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestCaseStart", 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestCaseStart", 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::SetUpTestCase", 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestStart", 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestStart", 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::SetUp", 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::* Test Body", 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestPartResult", 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestPartResult", 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::TearDown", 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestEnd", 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestEnd", 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestStart", 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestStart", 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::SetUp", 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::* Test Body", 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestPartResult", 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestPartResult", 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::TearDown", 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestEnd", 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestEnd", 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::TearDownTestCase", 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestCaseEnd", 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestCaseEnd", 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnEnvironmentsTearDownStart", 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnEnvironmentsTearDownStart", 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Environment::TearDown", 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnEnvironmentsTearDownEnd", 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnEnvironmentsTearDownEnd", 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestIterationEnd(0)", 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestIterationEnd(0)", 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestIterationStart(1)", 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestIterationStart(1)", 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnEnvironmentsSetUpStart", 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnEnvironmentsSetUpStart", 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Environment::SetUp", 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnEnvironmentsSetUpEnd", 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnEnvironmentsSetUpEnd", 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestCaseStart", 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestCaseStart", 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::SetUpTestCase", 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestStart", 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestStart", 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::SetUp", 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::* Test Body", 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestPartResult", 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestPartResult", 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::TearDown", 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestEnd", 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestEnd", 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestStart", 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestStart", 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::SetUp", 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::* Test Body", 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestPartResult", 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestPartResult", 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::TearDown", 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestEnd", 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestEnd", 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "ListenerTest::TearDownTestCase", 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestCaseEnd", 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestCaseEnd", 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnEnvironmentsTearDownStart", 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnEnvironmentsTearDownStart", 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Environment::TearDown", 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnEnvironmentsTearDownEnd", 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnEnvironmentsTearDownEnd", 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestIterationEnd(1)", 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestIterationEnd(1)", 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "2nd.OnTestProgramEnd", 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "1st.OnTestProgramEnd" 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch VerifyResults(events, 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch expected_events, 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sizeof(expected_events)/sizeof(expected_events[0])); 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We need to check manually for ad hoc test failures that happen after 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RUN_ALL_TESTS finishes. 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (UnitTest::GetInstance()->Failed()) 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ret_val = 1; 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ret_val; 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 314