113481Sgiacomo.travaglini@arm.com// Copyright 2009 Google Inc. All rights reserved. 213481Sgiacomo.travaglini@arm.com// 313481Sgiacomo.travaglini@arm.com// Redistribution and use in source and binary forms, with or without 413481Sgiacomo.travaglini@arm.com// modification, are permitted provided that the following conditions are 513481Sgiacomo.travaglini@arm.com// met: 613481Sgiacomo.travaglini@arm.com// 713481Sgiacomo.travaglini@arm.com// * Redistributions of source code must retain the above copyright 813481Sgiacomo.travaglini@arm.com// notice, this list of conditions and the following disclaimer. 913481Sgiacomo.travaglini@arm.com// * Redistributions in binary form must reproduce the above 1013481Sgiacomo.travaglini@arm.com// copyright notice, this list of conditions and the following disclaimer 1113481Sgiacomo.travaglini@arm.com// in the documentation and/or other materials provided with the 1213481Sgiacomo.travaglini@arm.com// distribution. 1313481Sgiacomo.travaglini@arm.com// * Neither the name of Google Inc. nor the names of its 1413481Sgiacomo.travaglini@arm.com// contributors may be used to endorse or promote products derived from 1513481Sgiacomo.travaglini@arm.com// this software without specific prior written permission. 1613481Sgiacomo.travaglini@arm.com// 1713481Sgiacomo.travaglini@arm.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1813481Sgiacomo.travaglini@arm.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1913481Sgiacomo.travaglini@arm.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2013481Sgiacomo.travaglini@arm.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2113481Sgiacomo.travaglini@arm.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2213481Sgiacomo.travaglini@arm.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2313481Sgiacomo.travaglini@arm.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2413481Sgiacomo.travaglini@arm.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2513481Sgiacomo.travaglini@arm.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2613481Sgiacomo.travaglini@arm.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2713481Sgiacomo.travaglini@arm.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2813481Sgiacomo.travaglini@arm.com// 2913481Sgiacomo.travaglini@arm.com// Author: vladl@google.com (Vlad Losev) 3013481Sgiacomo.travaglini@arm.com// 3113481Sgiacomo.travaglini@arm.com// The Google C++ Testing Framework (Google Test) 3213481Sgiacomo.travaglini@arm.com// 3313481Sgiacomo.travaglini@arm.com// This file verifies Google Test event listeners receive events at the 3413481Sgiacomo.travaglini@arm.com// right times. 3513481Sgiacomo.travaglini@arm.com 3613481Sgiacomo.travaglini@arm.com#include "gtest/gtest.h" 3713481Sgiacomo.travaglini@arm.com#include <vector> 3813481Sgiacomo.travaglini@arm.com 3913481Sgiacomo.travaglini@arm.comusing ::testing::AddGlobalTestEnvironment; 4013481Sgiacomo.travaglini@arm.comusing ::testing::Environment; 4113481Sgiacomo.travaglini@arm.comusing ::testing::InitGoogleTest; 4213481Sgiacomo.travaglini@arm.comusing ::testing::Test; 4313481Sgiacomo.travaglini@arm.comusing ::testing::TestCase; 4413481Sgiacomo.travaglini@arm.comusing ::testing::TestEventListener; 4513481Sgiacomo.travaglini@arm.comusing ::testing::TestInfo; 4613481Sgiacomo.travaglini@arm.comusing ::testing::TestPartResult; 4713481Sgiacomo.travaglini@arm.comusing ::testing::UnitTest; 4813481Sgiacomo.travaglini@arm.com 4913481Sgiacomo.travaglini@arm.com// Used by tests to register their events. 5013481Sgiacomo.travaglini@arm.comstd::vector<std::string>* g_events = NULL; 5113481Sgiacomo.travaglini@arm.com 5213481Sgiacomo.travaglini@arm.comnamespace testing { 5313481Sgiacomo.travaglini@arm.comnamespace internal { 5413481Sgiacomo.travaglini@arm.com 5513481Sgiacomo.travaglini@arm.comclass EventRecordingListener : public TestEventListener { 5613481Sgiacomo.travaglini@arm.com public: 5713481Sgiacomo.travaglini@arm.com explicit EventRecordingListener(const char* name) : name_(name) {} 5813481Sgiacomo.travaglini@arm.com 5913481Sgiacomo.travaglini@arm.com protected: 6013481Sgiacomo.travaglini@arm.com virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) { 6113481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnTestProgramStart")); 6213481Sgiacomo.travaglini@arm.com } 6313481Sgiacomo.travaglini@arm.com 6413481Sgiacomo.travaglini@arm.com virtual void OnTestIterationStart(const UnitTest& /*unit_test*/, 6513481Sgiacomo.travaglini@arm.com int iteration) { 6613481Sgiacomo.travaglini@arm.com Message message; 6713481Sgiacomo.travaglini@arm.com message << GetFullMethodName("OnTestIterationStart") 6813481Sgiacomo.travaglini@arm.com << "(" << iteration << ")"; 6913481Sgiacomo.travaglini@arm.com g_events->push_back(message.GetString()); 7013481Sgiacomo.travaglini@arm.com } 7113481Sgiacomo.travaglini@arm.com 7213481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) { 7313481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpStart")); 7413481Sgiacomo.travaglini@arm.com } 7513481Sgiacomo.travaglini@arm.com 7613481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) { 7713481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpEnd")); 7813481Sgiacomo.travaglini@arm.com } 7913481Sgiacomo.travaglini@arm.com 8013481Sgiacomo.travaglini@arm.com virtual void OnTestCaseStart(const TestCase& /*test_case*/) { 8113481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnTestCaseStart")); 8213481Sgiacomo.travaglini@arm.com } 8313481Sgiacomo.travaglini@arm.com 8413481Sgiacomo.travaglini@arm.com virtual void OnTestStart(const TestInfo& /*test_info*/) { 8513481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnTestStart")); 8613481Sgiacomo.travaglini@arm.com } 8713481Sgiacomo.travaglini@arm.com 8813481Sgiacomo.travaglini@arm.com virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) { 8913481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnTestPartResult")); 9013481Sgiacomo.travaglini@arm.com } 9113481Sgiacomo.travaglini@arm.com 9213481Sgiacomo.travaglini@arm.com virtual void OnTestEnd(const TestInfo& /*test_info*/) { 9313481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnTestEnd")); 9413481Sgiacomo.travaglini@arm.com } 9513481Sgiacomo.travaglini@arm.com 9613481Sgiacomo.travaglini@arm.com virtual void OnTestCaseEnd(const TestCase& /*test_case*/) { 9713481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnTestCaseEnd")); 9813481Sgiacomo.travaglini@arm.com } 9913481Sgiacomo.travaglini@arm.com 10013481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) { 10113481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownStart")); 10213481Sgiacomo.travaglini@arm.com } 10313481Sgiacomo.travaglini@arm.com 10413481Sgiacomo.travaglini@arm.com virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) { 10513481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownEnd")); 10613481Sgiacomo.travaglini@arm.com } 10713481Sgiacomo.travaglini@arm.com 10813481Sgiacomo.travaglini@arm.com virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/, 10913481Sgiacomo.travaglini@arm.com int iteration) { 11013481Sgiacomo.travaglini@arm.com Message message; 11113481Sgiacomo.travaglini@arm.com message << GetFullMethodName("OnTestIterationEnd") 11213481Sgiacomo.travaglini@arm.com << "(" << iteration << ")"; 11313481Sgiacomo.travaglini@arm.com g_events->push_back(message.GetString()); 11413481Sgiacomo.travaglini@arm.com } 11513481Sgiacomo.travaglini@arm.com 11613481Sgiacomo.travaglini@arm.com virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) { 11713481Sgiacomo.travaglini@arm.com g_events->push_back(GetFullMethodName("OnTestProgramEnd")); 11813481Sgiacomo.travaglini@arm.com } 11913481Sgiacomo.travaglini@arm.com 12013481Sgiacomo.travaglini@arm.com private: 12113481Sgiacomo.travaglini@arm.com std::string GetFullMethodName(const char* name) { 12213481Sgiacomo.travaglini@arm.com return name_ + "." + name; 12313481Sgiacomo.travaglini@arm.com } 12413481Sgiacomo.travaglini@arm.com 12513481Sgiacomo.travaglini@arm.com std::string name_; 12613481Sgiacomo.travaglini@arm.com}; 12713481Sgiacomo.travaglini@arm.com 12813481Sgiacomo.travaglini@arm.comclass EnvironmentInvocationCatcher : public Environment { 12913481Sgiacomo.travaglini@arm.com protected: 13013481Sgiacomo.travaglini@arm.com virtual void SetUp() { 13113481Sgiacomo.travaglini@arm.com g_events->push_back("Environment::SetUp"); 13213481Sgiacomo.travaglini@arm.com } 13313481Sgiacomo.travaglini@arm.com 13413481Sgiacomo.travaglini@arm.com virtual void TearDown() { 13513481Sgiacomo.travaglini@arm.com g_events->push_back("Environment::TearDown"); 13613481Sgiacomo.travaglini@arm.com } 13713481Sgiacomo.travaglini@arm.com}; 13813481Sgiacomo.travaglini@arm.com 13913481Sgiacomo.travaglini@arm.comclass ListenerTest : public Test { 14013481Sgiacomo.travaglini@arm.com protected: 14113481Sgiacomo.travaglini@arm.com static void SetUpTestCase() { 14213481Sgiacomo.travaglini@arm.com g_events->push_back("ListenerTest::SetUpTestCase"); 14313481Sgiacomo.travaglini@arm.com } 14413481Sgiacomo.travaglini@arm.com 14513481Sgiacomo.travaglini@arm.com static void TearDownTestCase() { 14613481Sgiacomo.travaglini@arm.com g_events->push_back("ListenerTest::TearDownTestCase"); 14713481Sgiacomo.travaglini@arm.com } 14813481Sgiacomo.travaglini@arm.com 14913481Sgiacomo.travaglini@arm.com virtual void SetUp() { 15013481Sgiacomo.travaglini@arm.com g_events->push_back("ListenerTest::SetUp"); 15113481Sgiacomo.travaglini@arm.com } 15213481Sgiacomo.travaglini@arm.com 15313481Sgiacomo.travaglini@arm.com virtual void TearDown() { 15413481Sgiacomo.travaglini@arm.com g_events->push_back("ListenerTest::TearDown"); 15513481Sgiacomo.travaglini@arm.com } 15613481Sgiacomo.travaglini@arm.com}; 15713481Sgiacomo.travaglini@arm.com 15813481Sgiacomo.travaglini@arm.comTEST_F(ListenerTest, DoesFoo) { 15913481Sgiacomo.travaglini@arm.com // Test execution order within a test case is not guaranteed so we are not 16013481Sgiacomo.travaglini@arm.com // recording the test name. 16113481Sgiacomo.travaglini@arm.com g_events->push_back("ListenerTest::* Test Body"); 16213481Sgiacomo.travaglini@arm.com SUCCEED(); // Triggers OnTestPartResult. 16313481Sgiacomo.travaglini@arm.com} 16413481Sgiacomo.travaglini@arm.com 16513481Sgiacomo.travaglini@arm.comTEST_F(ListenerTest, DoesBar) { 16613481Sgiacomo.travaglini@arm.com g_events->push_back("ListenerTest::* Test Body"); 16713481Sgiacomo.travaglini@arm.com SUCCEED(); // Triggers OnTestPartResult. 16813481Sgiacomo.travaglini@arm.com} 16913481Sgiacomo.travaglini@arm.com 17013481Sgiacomo.travaglini@arm.com} // namespace internal 17113481Sgiacomo.travaglini@arm.com 17213481Sgiacomo.travaglini@arm.com} // namespace testing 17313481Sgiacomo.travaglini@arm.com 17413481Sgiacomo.travaglini@arm.comusing ::testing::internal::EnvironmentInvocationCatcher; 17513481Sgiacomo.travaglini@arm.comusing ::testing::internal::EventRecordingListener; 17613481Sgiacomo.travaglini@arm.com 17713481Sgiacomo.travaglini@arm.comvoid VerifyResults(const std::vector<std::string>& data, 17813481Sgiacomo.travaglini@arm.com const char* const* expected_data, 17913481Sgiacomo.travaglini@arm.com size_t expected_data_size) { 18013481Sgiacomo.travaglini@arm.com const size_t actual_size = data.size(); 18113481Sgiacomo.travaglini@arm.com // If the following assertion fails, a new entry will be appended to 18213481Sgiacomo.travaglini@arm.com // data. Hence we save data.size() first. 18313481Sgiacomo.travaglini@arm.com EXPECT_EQ(expected_data_size, actual_size); 18413481Sgiacomo.travaglini@arm.com 18513481Sgiacomo.travaglini@arm.com // Compares the common prefix. 18613481Sgiacomo.travaglini@arm.com const size_t shorter_size = expected_data_size <= actual_size ? 18713481Sgiacomo.travaglini@arm.com expected_data_size : actual_size; 18813481Sgiacomo.travaglini@arm.com size_t i = 0; 18913481Sgiacomo.travaglini@arm.com for (; i < shorter_size; ++i) { 19013481Sgiacomo.travaglini@arm.com ASSERT_STREQ(expected_data[i], data[i].c_str()) 19113481Sgiacomo.travaglini@arm.com << "at position " << i; 19213481Sgiacomo.travaglini@arm.com } 19313481Sgiacomo.travaglini@arm.com 19413481Sgiacomo.travaglini@arm.com // Prints extra elements in the actual data. 19513481Sgiacomo.travaglini@arm.com for (; i < actual_size; ++i) { 19613481Sgiacomo.travaglini@arm.com printf(" Actual event #%lu: %s\n", 19713481Sgiacomo.travaglini@arm.com static_cast<unsigned long>(i), data[i].c_str()); 19813481Sgiacomo.travaglini@arm.com } 19913481Sgiacomo.travaglini@arm.com} 20013481Sgiacomo.travaglini@arm.com 20113481Sgiacomo.travaglini@arm.comint main(int argc, char **argv) { 20213481Sgiacomo.travaglini@arm.com std::vector<std::string> events; 20313481Sgiacomo.travaglini@arm.com g_events = &events; 20413481Sgiacomo.travaglini@arm.com InitGoogleTest(&argc, argv); 20513481Sgiacomo.travaglini@arm.com 20613481Sgiacomo.travaglini@arm.com UnitTest::GetInstance()->listeners().Append( 20713481Sgiacomo.travaglini@arm.com new EventRecordingListener("1st")); 20813481Sgiacomo.travaglini@arm.com UnitTest::GetInstance()->listeners().Append( 20913481Sgiacomo.travaglini@arm.com new EventRecordingListener("2nd")); 21013481Sgiacomo.travaglini@arm.com 21113481Sgiacomo.travaglini@arm.com AddGlobalTestEnvironment(new EnvironmentInvocationCatcher); 21213481Sgiacomo.travaglini@arm.com 21313481Sgiacomo.travaglini@arm.com GTEST_CHECK_(events.size() == 0) 21413481Sgiacomo.travaglini@arm.com << "AddGlobalTestEnvironment should not generate any events itself."; 21513481Sgiacomo.travaglini@arm.com 21613481Sgiacomo.travaglini@arm.com ::testing::GTEST_FLAG(repeat) = 2; 21713481Sgiacomo.travaglini@arm.com int ret_val = RUN_ALL_TESTS(); 21813481Sgiacomo.travaglini@arm.com 21913481Sgiacomo.travaglini@arm.com const char* const expected_events[] = { 22013481Sgiacomo.travaglini@arm.com "1st.OnTestProgramStart", 22113481Sgiacomo.travaglini@arm.com "2nd.OnTestProgramStart", 22213481Sgiacomo.travaglini@arm.com "1st.OnTestIterationStart(0)", 22313481Sgiacomo.travaglini@arm.com "2nd.OnTestIterationStart(0)", 22413481Sgiacomo.travaglini@arm.com "1st.OnEnvironmentsSetUpStart", 22513481Sgiacomo.travaglini@arm.com "2nd.OnEnvironmentsSetUpStart", 22613481Sgiacomo.travaglini@arm.com "Environment::SetUp", 22713481Sgiacomo.travaglini@arm.com "2nd.OnEnvironmentsSetUpEnd", 22813481Sgiacomo.travaglini@arm.com "1st.OnEnvironmentsSetUpEnd", 22913481Sgiacomo.travaglini@arm.com "1st.OnTestCaseStart", 23013481Sgiacomo.travaglini@arm.com "2nd.OnTestCaseStart", 23113481Sgiacomo.travaglini@arm.com "ListenerTest::SetUpTestCase", 23213481Sgiacomo.travaglini@arm.com "1st.OnTestStart", 23313481Sgiacomo.travaglini@arm.com "2nd.OnTestStart", 23413481Sgiacomo.travaglini@arm.com "ListenerTest::SetUp", 23513481Sgiacomo.travaglini@arm.com "ListenerTest::* Test Body", 23613481Sgiacomo.travaglini@arm.com "1st.OnTestPartResult", 23713481Sgiacomo.travaglini@arm.com "2nd.OnTestPartResult", 23813481Sgiacomo.travaglini@arm.com "ListenerTest::TearDown", 23913481Sgiacomo.travaglini@arm.com "2nd.OnTestEnd", 24013481Sgiacomo.travaglini@arm.com "1st.OnTestEnd", 24113481Sgiacomo.travaglini@arm.com "1st.OnTestStart", 24213481Sgiacomo.travaglini@arm.com "2nd.OnTestStart", 24313481Sgiacomo.travaglini@arm.com "ListenerTest::SetUp", 24413481Sgiacomo.travaglini@arm.com "ListenerTest::* Test Body", 24513481Sgiacomo.travaglini@arm.com "1st.OnTestPartResult", 24613481Sgiacomo.travaglini@arm.com "2nd.OnTestPartResult", 24713481Sgiacomo.travaglini@arm.com "ListenerTest::TearDown", 24813481Sgiacomo.travaglini@arm.com "2nd.OnTestEnd", 24913481Sgiacomo.travaglini@arm.com "1st.OnTestEnd", 25013481Sgiacomo.travaglini@arm.com "ListenerTest::TearDownTestCase", 25113481Sgiacomo.travaglini@arm.com "2nd.OnTestCaseEnd", 25213481Sgiacomo.travaglini@arm.com "1st.OnTestCaseEnd", 25313481Sgiacomo.travaglini@arm.com "1st.OnEnvironmentsTearDownStart", 25413481Sgiacomo.travaglini@arm.com "2nd.OnEnvironmentsTearDownStart", 25513481Sgiacomo.travaglini@arm.com "Environment::TearDown", 25613481Sgiacomo.travaglini@arm.com "2nd.OnEnvironmentsTearDownEnd", 25713481Sgiacomo.travaglini@arm.com "1st.OnEnvironmentsTearDownEnd", 25813481Sgiacomo.travaglini@arm.com "2nd.OnTestIterationEnd(0)", 25913481Sgiacomo.travaglini@arm.com "1st.OnTestIterationEnd(0)", 26013481Sgiacomo.travaglini@arm.com "1st.OnTestIterationStart(1)", 26113481Sgiacomo.travaglini@arm.com "2nd.OnTestIterationStart(1)", 26213481Sgiacomo.travaglini@arm.com "1st.OnEnvironmentsSetUpStart", 26313481Sgiacomo.travaglini@arm.com "2nd.OnEnvironmentsSetUpStart", 26413481Sgiacomo.travaglini@arm.com "Environment::SetUp", 26513481Sgiacomo.travaglini@arm.com "2nd.OnEnvironmentsSetUpEnd", 26613481Sgiacomo.travaglini@arm.com "1st.OnEnvironmentsSetUpEnd", 26713481Sgiacomo.travaglini@arm.com "1st.OnTestCaseStart", 26813481Sgiacomo.travaglini@arm.com "2nd.OnTestCaseStart", 26913481Sgiacomo.travaglini@arm.com "ListenerTest::SetUpTestCase", 27013481Sgiacomo.travaglini@arm.com "1st.OnTestStart", 27113481Sgiacomo.travaglini@arm.com "2nd.OnTestStart", 27213481Sgiacomo.travaglini@arm.com "ListenerTest::SetUp", 27313481Sgiacomo.travaglini@arm.com "ListenerTest::* Test Body", 27413481Sgiacomo.travaglini@arm.com "1st.OnTestPartResult", 27513481Sgiacomo.travaglini@arm.com "2nd.OnTestPartResult", 27613481Sgiacomo.travaglini@arm.com "ListenerTest::TearDown", 27713481Sgiacomo.travaglini@arm.com "2nd.OnTestEnd", 27813481Sgiacomo.travaglini@arm.com "1st.OnTestEnd", 27913481Sgiacomo.travaglini@arm.com "1st.OnTestStart", 28013481Sgiacomo.travaglini@arm.com "2nd.OnTestStart", 28113481Sgiacomo.travaglini@arm.com "ListenerTest::SetUp", 28213481Sgiacomo.travaglini@arm.com "ListenerTest::* Test Body", 28313481Sgiacomo.travaglini@arm.com "1st.OnTestPartResult", 28413481Sgiacomo.travaglini@arm.com "2nd.OnTestPartResult", 28513481Sgiacomo.travaglini@arm.com "ListenerTest::TearDown", 28613481Sgiacomo.travaglini@arm.com "2nd.OnTestEnd", 28713481Sgiacomo.travaglini@arm.com "1st.OnTestEnd", 28813481Sgiacomo.travaglini@arm.com "ListenerTest::TearDownTestCase", 28913481Sgiacomo.travaglini@arm.com "2nd.OnTestCaseEnd", 29013481Sgiacomo.travaglini@arm.com "1st.OnTestCaseEnd", 29113481Sgiacomo.travaglini@arm.com "1st.OnEnvironmentsTearDownStart", 29213481Sgiacomo.travaglini@arm.com "2nd.OnEnvironmentsTearDownStart", 29313481Sgiacomo.travaglini@arm.com "Environment::TearDown", 29413481Sgiacomo.travaglini@arm.com "2nd.OnEnvironmentsTearDownEnd", 29513481Sgiacomo.travaglini@arm.com "1st.OnEnvironmentsTearDownEnd", 29613481Sgiacomo.travaglini@arm.com "2nd.OnTestIterationEnd(1)", 29713481Sgiacomo.travaglini@arm.com "1st.OnTestIterationEnd(1)", 29813481Sgiacomo.travaglini@arm.com "2nd.OnTestProgramEnd", 29913481Sgiacomo.travaglini@arm.com "1st.OnTestProgramEnd" 30013481Sgiacomo.travaglini@arm.com }; 30113481Sgiacomo.travaglini@arm.com VerifyResults(events, 30213481Sgiacomo.travaglini@arm.com expected_events, 30313481Sgiacomo.travaglini@arm.com sizeof(expected_events)/sizeof(expected_events[0])); 30413481Sgiacomo.travaglini@arm.com 30513481Sgiacomo.travaglini@arm.com // We need to check manually for ad hoc test failures that happen after 30613481Sgiacomo.travaglini@arm.com // RUN_ALL_TESTS finishes. 30713481Sgiacomo.travaglini@arm.com if (UnitTest::GetInstance()->Failed()) 30813481Sgiacomo.travaglini@arm.com ret_val = 1; 30913481Sgiacomo.travaglini@arm.com 31013481Sgiacomo.travaglini@arm.com return ret_val; 31113481Sgiacomo.travaglini@arm.com} 312