141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Copyright 2009 Google Inc. All rights reserved. 241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Redistribution and use in source and binary forms, with or without 441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// modification, are permitted provided that the following conditions are 541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// met: 641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// * Redistributions of source code must retain the above copyright 841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// notice, this list of conditions and the following disclaimer. 941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// * Redistributions in binary form must reproduce the above 1041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// copyright notice, this list of conditions and the following disclaimer 1141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// in the documentation and/or other materials provided with the 1241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// distribution. 1341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// * Neither the name of Google Inc. nor the names of its 1441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// contributors may be used to endorse or promote products derived from 1541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// this software without specific prior written permission. 1641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 1741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 2941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Author: vladl@google.com (Vlad Losev) 3041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 3141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// The Google C++ Testing Framework (Google Test) 3241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 3341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// This file verifies Google Test event listeners receive events at the 3441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// right times. 3541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 3641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include "gtest/gtest.h" 3741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include <vector> 3841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 3941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::AddGlobalTestEnvironment; 4041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::Environment; 4141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::InitGoogleTest; 4241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::Test; 4341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::TestCase; 4441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::TestEventListener; 4541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::TestInfo; 4641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::TestPartResult; 4741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::UnitTest; 4841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 4941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Used by tests to register their events. 50fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesstd::vector<std::string>* g_events = NULL; 5141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 5241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotnamespace testing { 5341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotnamespace internal { 5441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 5541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass EventRecordingListener : public TestEventListener { 5641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 57fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes explicit EventRecordingListener(const char* name) : name_(name) {} 5841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 5941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 6041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { 6141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnTestProgramStart")); 6241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 6341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 6441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, 6541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int iteration) { 6641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Message message; 6741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot message << GetFullMethodName("OnTestIterationStart") 6841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "(" << iteration << ")"; 6941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(message.GetString()); 7041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 7141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 7241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) { 7341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpStart")); 7441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 7541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 7641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) { 7741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpEnd")); 7841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 7941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 8041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestCaseStart(const TestCase& /*test_case*/) { 8141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnTestCaseStart")); 8241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 8341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 8441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestStart(const TestInfo& /*test_info*/) { 8541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnTestStart")); 8641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 8741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 8841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) { 8941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnTestPartResult")); 9041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 9141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 9241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestEnd(const TestInfo& /*test_info*/) { 9341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnTestEnd")); 9441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 9541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 9641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestCaseEnd(const TestCase& /*test_case*/) { 9741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnTestCaseEnd")); 9841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 9941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 10041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) { 10141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownStart")); 10241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 10341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 10441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) { 10541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownEnd")); 10641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 10741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 10841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, 10941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int iteration) { 11041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot Message message; 11141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot message << GetFullMethodName("OnTestIterationEnd") 11241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "(" << iteration << ")"; 11341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(message.GetString()); 11441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 11541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 11641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) { 11741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events->push_back(GetFullMethodName("OnTestProgramEnd")); 11841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 11941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 12041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot private: 121fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes std::string GetFullMethodName(const char* name) { 122fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes return name_ + "." + name; 12341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 12441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 125fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes std::string name_; 12641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 12741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 12841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass EnvironmentInvocationCatcher : public Environment { 12941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 13041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void SetUp() { 131fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes g_events->push_back("Environment::SetUp"); 13241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 13341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 13441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void TearDown() { 135fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes g_events->push_back("Environment::TearDown"); 13641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 13741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 13841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 13941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass ListenerTest : public Test { 14041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 14141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void SetUpTestCase() { 142fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes g_events->push_back("ListenerTest::SetUpTestCase"); 14341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 14441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 14541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void TearDownTestCase() { 146fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes g_events->push_back("ListenerTest::TearDownTestCase"); 14741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 14841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 14941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void SetUp() { 150fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes g_events->push_back("ListenerTest::SetUp"); 15141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 15241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 15341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void TearDown() { 154fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes g_events->push_back("ListenerTest::TearDown"); 15541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 15641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 15741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 15841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(ListenerTest, DoesFoo) { 15941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Test execution order within a test case is not guaranteed so we are not 16041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // recording the test name. 161fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes g_events->push_back("ListenerTest::* Test Body"); 16241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot SUCCEED(); // Triggers OnTestPartResult. 16341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 16441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 16541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(ListenerTest, DoesBar) { 166fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes g_events->push_back("ListenerTest::* Test Body"); 16741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot SUCCEED(); // Triggers OnTestPartResult. 16841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 16941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 17041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} // namespace internal 17141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 17241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} // namespace testing 17341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 17441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::internal::EnvironmentInvocationCatcher; 17541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing ::testing::internal::EventRecordingListener; 17641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 177fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughesvoid VerifyResults(const std::vector<std::string>& data, 17841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* const* expected_data, 17941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int expected_data_size) { 18041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int actual_size = data.size(); 18141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // If the following assertion fails, a new entry will be appended to 18241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // data. Hence we save data.size() first. 18341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot EXPECT_EQ(expected_data_size, actual_size); 18441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 18541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Compares the common prefix. 18641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const int shorter_size = expected_data_size <= actual_size ? 18741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot expected_data_size : actual_size; 18841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int i = 0; 18941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (; i < shorter_size; ++i) { 19041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ASSERT_STREQ(expected_data[i], data[i].c_str()) 19141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "at position " << i; 19241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 19341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 19441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Prints extra elements in the actual data. 19541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot for (; i < actual_size; ++i) { 19641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf(" Actual event #%d: %s\n", i, data[i].c_str()); 19741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 19841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 19941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 20041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotint main(int argc, char **argv) { 201fc2de66453b0669c09eaca643b07d34443858b6fElliott Hughes std::vector<std::string> events; 20241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot g_events = &events; 20341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot InitGoogleTest(&argc, argv); 20441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 20541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot UnitTest::GetInstance()->listeners().Append( 20641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot new EventRecordingListener("1st")); 20741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot UnitTest::GetInstance()->listeners().Append( 20841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot new EventRecordingListener("2nd")); 20941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 21041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot AddGlobalTestEnvironment(new EnvironmentInvocationCatcher); 21141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 21241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_CHECK_(events.size() == 0) 21341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "AddGlobalTestEnvironment should not generate any events itself."; 21441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 21541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ::testing::GTEST_FLAG(repeat) = 2; 21641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot int ret_val = RUN_ALL_TESTS(); 21741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 21841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot const char* const expected_events[] = { 21941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestProgramStart", 22041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestProgramStart", 22141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestIterationStart(0)", 22241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestIterationStart(0)", 22341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnEnvironmentsSetUpStart", 22441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnEnvironmentsSetUpStart", 22541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Environment::SetUp", 22641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnEnvironmentsSetUpEnd", 22741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnEnvironmentsSetUpEnd", 22841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestCaseStart", 22941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestCaseStart", 23041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::SetUpTestCase", 23141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestStart", 23241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestStart", 23341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::SetUp", 23441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::* Test Body", 23541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestPartResult", 23641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestPartResult", 23741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::TearDown", 23841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestEnd", 23941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestEnd", 24041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestStart", 24141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestStart", 24241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::SetUp", 24341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::* Test Body", 24441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestPartResult", 24541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestPartResult", 24641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::TearDown", 24741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestEnd", 24841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestEnd", 24941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::TearDownTestCase", 25041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestCaseEnd", 25141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestCaseEnd", 25241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnEnvironmentsTearDownStart", 25341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnEnvironmentsTearDownStart", 25441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Environment::TearDown", 25541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnEnvironmentsTearDownEnd", 25641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnEnvironmentsTearDownEnd", 25741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestIterationEnd(0)", 25841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestIterationEnd(0)", 25941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestIterationStart(1)", 26041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestIterationStart(1)", 26141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnEnvironmentsSetUpStart", 26241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnEnvironmentsSetUpStart", 26341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Environment::SetUp", 26441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnEnvironmentsSetUpEnd", 26541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnEnvironmentsSetUpEnd", 26641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestCaseStart", 26741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestCaseStart", 26841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::SetUpTestCase", 26941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestStart", 27041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestStart", 27141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::SetUp", 27241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::* Test Body", 27341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestPartResult", 27441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestPartResult", 27541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::TearDown", 27641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestEnd", 27741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestEnd", 27841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestStart", 27941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestStart", 28041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::SetUp", 28141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::* Test Body", 28241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestPartResult", 28341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestPartResult", 28441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::TearDown", 28541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestEnd", 28641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestEnd", 28741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "ListenerTest::TearDownTestCase", 28841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestCaseEnd", 28941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestCaseEnd", 29041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnEnvironmentsTearDownStart", 29141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnEnvironmentsTearDownStart", 29241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "Environment::TearDown", 29341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnEnvironmentsTearDownEnd", 29441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnEnvironmentsTearDownEnd", 29541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestIterationEnd(1)", 29641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestIterationEnd(1)", 29741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "2nd.OnTestProgramEnd", 29841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "1st.OnTestProgramEnd" 29941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot }; 30041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot VerifyResults(events, 30141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot expected_events, 30241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot sizeof(expected_events)/sizeof(expected_events[0])); 30341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 30441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // We need to check manually for ad hoc test failures that happen after 30541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // RUN_ALL_TESTS finishes. 30641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot if (UnitTest::GetInstance()->Failed()) 30741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ret_val = 1; 30841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 30941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return ret_val; 31041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 311