googletest-listener-test.cc
Go to the documentation of this file.
1 // Copyright 2009 Google Inc. All rights reserved.
2 //
3 // Redistribution and use in source and binary forms, with or without
4 // modification, are permitted provided that the following conditions are
5 // met:
6 //
7 // * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 // * Redistributions in binary form must reproduce the above
10 // copyright notice, this list of conditions and the following disclaimer
11 // in the documentation and/or other materials provided with the
12 // distribution.
13 // * Neither the name of Google Inc. nor the names of its
14 // contributors may be used to endorse or promote products derived from
15 // this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 
29 //
30 // The Google C++ Testing and Mocking Framework (Google Test)
31 //
32 // This file verifies Google Test event listeners receive events at the
33 // right times.
34 
35 #include <vector>
36 
37 #include "gtest/gtest.h"
38 
40 using ::testing::Environment;
42 using ::testing::Test;
43 using ::testing::TestSuite;
44 using ::testing::TestEventListener;
45 using ::testing::TestInfo;
46 using ::testing::TestPartResult;
47 using ::testing::UnitTest;
48 
49 // Used by tests to register their events.
50 std::vector<std::string>* g_events = nullptr;
51 
52 namespace testing {
53 namespace internal {
54 
56  public:
57  explicit EventRecordingListener(const char* name) : name_(name) {}
58 
59  protected:
60  void OnTestProgramStart(const UnitTest& /*unit_test*/) override {
61  g_events->push_back(GetFullMethodName("OnTestProgramStart"));
62  }
63 
64  void OnTestIterationStart(const UnitTest& /*unit_test*/,
65  int iteration) override {
67  message << GetFullMethodName("OnTestIterationStart")
68  << "(" << iteration << ")";
69  g_events->push_back(message.GetString());
70  }
71 
72  void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) override {
73  g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpStart"));
74  }
75 
76  void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) override {
77  g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpEnd"));
78  }
79 
80  void OnTestCaseStart(const TestCase& /*test_case*/) override {
81  g_events->push_back(GetFullMethodName("OnTestCaseStart"));
82  }
83 
84  void OnTestStart(const TestInfo& /*test_info*/) override {
85  g_events->push_back(GetFullMethodName("OnTestStart"));
86  }
87 
88  void OnTestPartResult(const TestPartResult& /*test_part_result*/) override {
89  g_events->push_back(GetFullMethodName("OnTestPartResult"));
90  }
91 
92  void OnTestEnd(const TestInfo& /*test_info*/) override {
93  g_events->push_back(GetFullMethodName("OnTestEnd"));
94  }
95 
96  void OnTestCaseEnd(const TestCase& /*test_case*/) override {
97  g_events->push_back(GetFullMethodName("OnTestCaseEnd"));
98  }
99 
100  void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) override {
101  g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownStart"));
102  }
103 
104  void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) override {
105  g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownEnd"));
106  }
107 
108  void OnTestIterationEnd(const UnitTest& /*unit_test*/,
109  int iteration) override {
111  message << GetFullMethodName("OnTestIterationEnd")
112  << "(" << iteration << ")";
113  g_events->push_back(message.GetString());
114  }
115 
116  void OnTestProgramEnd(const UnitTest& /*unit_test*/) override {
117  g_events->push_back(GetFullMethodName("OnTestProgramEnd"));
118  }
119 
120  private:
122  return name_ + "." + name;
123  }
124 
126 };
127 
128 // This listener is using OnTestSuiteStart, OnTestSuiteEnd API
130  public:
131  explicit EventRecordingListener2(const char* name) : name_(name) {}
132 
133  protected:
134  void OnTestProgramStart(const UnitTest& /*unit_test*/) override {
135  g_events->push_back(GetFullMethodName("OnTestProgramStart"));
136  }
137 
138  void OnTestIterationStart(const UnitTest& /*unit_test*/,
139  int iteration) override {
141  message << GetFullMethodName("OnTestIterationStart") << "(" << iteration
142  << ")";
143  g_events->push_back(message.GetString());
144  }
145 
146  void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) override {
147  g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpStart"));
148  }
149 
150  void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) override {
151  g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpEnd"));
152  }
153 
154  void OnTestSuiteStart(const TestSuite& /*test_suite*/) override {
155  g_events->push_back(GetFullMethodName("OnTestSuiteStart"));
156  }
157 
158  void OnTestStart(const TestInfo& /*test_info*/) override {
159  g_events->push_back(GetFullMethodName("OnTestStart"));
160  }
161 
162  void OnTestPartResult(const TestPartResult& /*test_part_result*/) override {
163  g_events->push_back(GetFullMethodName("OnTestPartResult"));
164  }
165 
166  void OnTestEnd(const TestInfo& /*test_info*/) override {
167  g_events->push_back(GetFullMethodName("OnTestEnd"));
168  }
169 
170  void OnTestSuiteEnd(const TestSuite& /*test_suite*/) override {
171  g_events->push_back(GetFullMethodName("OnTestSuiteEnd"));
172  }
173 
174  void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) override {
175  g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownStart"));
176  }
177 
178  void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) override {
179  g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownEnd"));
180  }
181 
182  void OnTestIterationEnd(const UnitTest& /*unit_test*/,
183  int iteration) override {
185  message << GetFullMethodName("OnTestIterationEnd") << "(" << iteration
186  << ")";
187  g_events->push_back(message.GetString());
188  }
189 
190  void OnTestProgramEnd(const UnitTest& /*unit_test*/) override {
191  g_events->push_back(GetFullMethodName("OnTestProgramEnd"));
192  }
193 
194  private:
195  std::string GetFullMethodName(const char* name) { return name_ + "." + name; }
196 
198 };
199 
201  protected:
202  void SetUp() override { g_events->push_back("Environment::SetUp"); }
203 
204  void TearDown() override { g_events->push_back("Environment::TearDown"); }
205 };
206 
207 class ListenerTest : public Test {
208  protected:
209  static void SetUpTestSuite() {
210  g_events->push_back("ListenerTest::SetUpTestSuite");
211  }
212 
213  static void TearDownTestSuite() {
214  g_events->push_back("ListenerTest::TearDownTestSuite");
215  }
216 
217  void SetUp() override { g_events->push_back("ListenerTest::SetUp"); }
218 
219  void TearDown() override { g_events->push_back("ListenerTest::TearDown"); }
220 };
221 
222 TEST_F(ListenerTest, DoesFoo) {
223  // Test execution order within a test case is not guaranteed so we are not
224  // recording the test name.
225  g_events->push_back("ListenerTest::* Test Body");
226  SUCCEED(); // Triggers OnTestPartResult.
227 }
228 
229 TEST_F(ListenerTest, DoesBar) {
230  g_events->push_back("ListenerTest::* Test Body");
231  SUCCEED(); // Triggers OnTestPartResult.
232 }
233 
234 } // namespace internal
235 
236 } // namespace testing
237 
238 using ::testing::internal::EnvironmentInvocationCatcher;
239 using ::testing::internal::EventRecordingListener;
240 using ::testing::internal::EventRecordingListener2;
241 
242 void VerifyResults(const std::vector<std::string>& data,
243  const char* const* expected_data,
244  size_t expected_data_size) {
245  const size_t actual_size = data.size();
246  // If the following assertion fails, a new entry will be appended to
247  // data. Hence we save data.size() first.
248  EXPECT_EQ(expected_data_size, actual_size);
249 
250  // Compares the common prefix.
251  const size_t shorter_size = expected_data_size <= actual_size ?
252  expected_data_size : actual_size;
253  size_t i = 0;
254  for (; i < shorter_size; ++i) {
255  ASSERT_STREQ(expected_data[i], data[i].c_str())
256  << "at position " << i;
257  }
258 
259  // Prints extra elements in the actual data.
260  for (; i < actual_size; ++i) {
261  printf(" Actual event #%lu: %s\n",
262  static_cast<unsigned long>(i), data[i].c_str());
263  }
264 }
265 
266 int main(int argc, char **argv) {
267  std::vector<std::string> events;
268  g_events = &events;
269  InitGoogleTest(&argc, argv);
270 
271  UnitTest::GetInstance()->listeners().Append(
272  new EventRecordingListener("1st"));
273  UnitTest::GetInstance()->listeners().Append(
274  new EventRecordingListener("2nd"));
275  UnitTest::GetInstance()->listeners().Append(
276  new EventRecordingListener2("3rd"));
277 
278  AddGlobalTestEnvironment(new EnvironmentInvocationCatcher);
279 
280  GTEST_CHECK_(events.size() == 0)
281  << "AddGlobalTestEnvironment should not generate any events itself.";
282 
283  ::testing::GTEST_FLAG(repeat) = 2;
284  int ret_val = RUN_ALL_TESTS();
285 
286  const char* const expected_events[] = {"1st.OnTestProgramStart",
287  "2nd.OnTestProgramStart",
288  "3rd.OnTestProgramStart",
289  "1st.OnTestIterationStart(0)",
290  "2nd.OnTestIterationStart(0)",
291  "3rd.OnTestIterationStart(0)",
292  "1st.OnEnvironmentsSetUpStart",
293  "2nd.OnEnvironmentsSetUpStart",
294  "3rd.OnEnvironmentsSetUpStart",
295  "Environment::SetUp",
296  "3rd.OnEnvironmentsSetUpEnd",
297  "2nd.OnEnvironmentsSetUpEnd",
298  "1st.OnEnvironmentsSetUpEnd",
299  "3rd.OnTestSuiteStart",
300  "1st.OnTestCaseStart",
301  "2nd.OnTestCaseStart",
302  "ListenerTest::SetUpTestSuite",
303  "1st.OnTestStart",
304  "2nd.OnTestStart",
305  "3rd.OnTestStart",
306  "ListenerTest::SetUp",
307  "ListenerTest::* Test Body",
308  "1st.OnTestPartResult",
309  "2nd.OnTestPartResult",
310  "3rd.OnTestPartResult",
311  "ListenerTest::TearDown",
312  "3rd.OnTestEnd",
313  "2nd.OnTestEnd",
314  "1st.OnTestEnd",
315  "1st.OnTestStart",
316  "2nd.OnTestStart",
317  "3rd.OnTestStart",
318  "ListenerTest::SetUp",
319  "ListenerTest::* Test Body",
320  "1st.OnTestPartResult",
321  "2nd.OnTestPartResult",
322  "3rd.OnTestPartResult",
323  "ListenerTest::TearDown",
324  "3rd.OnTestEnd",
325  "2nd.OnTestEnd",
326  "1st.OnTestEnd",
327  "ListenerTest::TearDownTestSuite",
328  "3rd.OnTestSuiteEnd",
329  "2nd.OnTestCaseEnd",
330  "1st.OnTestCaseEnd",
331  "1st.OnEnvironmentsTearDownStart",
332  "2nd.OnEnvironmentsTearDownStart",
333  "3rd.OnEnvironmentsTearDownStart",
334  "Environment::TearDown",
335  "3rd.OnEnvironmentsTearDownEnd",
336  "2nd.OnEnvironmentsTearDownEnd",
337  "1st.OnEnvironmentsTearDownEnd",
338  "3rd.OnTestIterationEnd(0)",
339  "2nd.OnTestIterationEnd(0)",
340  "1st.OnTestIterationEnd(0)",
341  "1st.OnTestIterationStart(1)",
342  "2nd.OnTestIterationStart(1)",
343  "3rd.OnTestIterationStart(1)",
344  "1st.OnEnvironmentsSetUpStart",
345  "2nd.OnEnvironmentsSetUpStart",
346  "3rd.OnEnvironmentsSetUpStart",
347  "Environment::SetUp",
348  "3rd.OnEnvironmentsSetUpEnd",
349  "2nd.OnEnvironmentsSetUpEnd",
350  "1st.OnEnvironmentsSetUpEnd",
351  "3rd.OnTestSuiteStart",
352  "1st.OnTestCaseStart",
353  "2nd.OnTestCaseStart",
354  "ListenerTest::SetUpTestSuite",
355  "1st.OnTestStart",
356  "2nd.OnTestStart",
357  "3rd.OnTestStart",
358  "ListenerTest::SetUp",
359  "ListenerTest::* Test Body",
360  "1st.OnTestPartResult",
361  "2nd.OnTestPartResult",
362  "3rd.OnTestPartResult",
363  "ListenerTest::TearDown",
364  "3rd.OnTestEnd",
365  "2nd.OnTestEnd",
366  "1st.OnTestEnd",
367  "1st.OnTestStart",
368  "2nd.OnTestStart",
369  "3rd.OnTestStart",
370  "ListenerTest::SetUp",
371  "ListenerTest::* Test Body",
372  "1st.OnTestPartResult",
373  "2nd.OnTestPartResult",
374  "3rd.OnTestPartResult",
375  "ListenerTest::TearDown",
376  "3rd.OnTestEnd",
377  "2nd.OnTestEnd",
378  "1st.OnTestEnd",
379  "ListenerTest::TearDownTestSuite",
380  "3rd.OnTestSuiteEnd",
381  "2nd.OnTestCaseEnd",
382  "1st.OnTestCaseEnd",
383  "1st.OnEnvironmentsTearDownStart",
384  "2nd.OnEnvironmentsTearDownStart",
385  "3rd.OnEnvironmentsTearDownStart",
386  "Environment::TearDown",
387  "3rd.OnEnvironmentsTearDownEnd",
388  "2nd.OnEnvironmentsTearDownEnd",
389  "1st.OnEnvironmentsTearDownEnd",
390  "3rd.OnTestIterationEnd(1)",
391  "2nd.OnTestIterationEnd(1)",
392  "1st.OnTestIterationEnd(1)",
393  "3rd.OnTestProgramEnd",
394  "2nd.OnTestProgramEnd",
395  "1st.OnTestProgramEnd"};
396 
397  VerifyResults(events,
398  expected_events,
399  sizeof(expected_events)/sizeof(expected_events[0]));
400 
401  // We need to check manually for ad hoc test failures that happen after
402  // RUN_ALL_TESTS finishes.
403  if (UnitTest::GetInstance()->Failed())
404  ret_val = 1;
405 
406  return ret_val;
407 }
testing::internal::EventRecordingListener2::OnEnvironmentsSetUpEnd
void OnEnvironmentsSetUpEnd(const UnitTest &) override
Definition: googletest-listener-test.cc:150
testing::internal::ListenerTest::TearDown
void TearDown() override
Definition: googletest-listener-test.cc:219
testing
Definition: gmock-actions.h:59
testing::internal::EventRecordingListener2::OnTestPartResult
void OnTestPartResult(const TestPartResult &) override
Definition: googletest-listener-test.cc:162
name
GLuint const GLchar * name
Definition: glcorearb.h:3055
testing::TestInfo
Definition: gtest.h:695
testing::internal::EventRecordingListener::OnTestCaseStart
void OnTestCaseStart(const TestCase &) override
Definition: googletest-listener-test.cc:80
testing::internal::EventRecordingListener2::name_
std::string name_
Definition: googletest-listener-test.cc:197
testing::internal::EventRecordingListener::name_
std::string name_
Definition: googletest-listener-test.cc:125
testing::internal::EnvironmentInvocationCatcher::TearDown
void TearDown() override
Definition: googletest-listener-test.cc:204
testing::internal::EventRecordingListener::EventRecordingListener
EventRecordingListener(const char *name)
Definition: googletest-listener-test.cc:57
testing::internal::EventRecordingListener::OnTestProgramStart
void OnTestProgramStart(const UnitTest &) override
Definition: googletest-listener-test.cc:60
testing::internal::EventRecordingListener::OnTestProgramEnd
void OnTestProgramEnd(const UnitTest &) override
Definition: googletest-listener-test.cc:116
testing::internal::EventRecordingListener::OnTestIterationEnd
void OnTestIterationEnd(const UnitTest &, int iteration) override
Definition: googletest-listener-test.cc:108
testing::internal::EventRecordingListener2::OnTestIterationEnd
void OnTestIterationEnd(const UnitTest &, int iteration) override
Definition: googletest-listener-test.cc:182
testing::internal::EventRecordingListener::OnEnvironmentsTearDownStart
void OnEnvironmentsTearDownStart(const UnitTest &) override
Definition: googletest-listener-test.cc:100
g_events
std::vector< std::string > * g_events
Definition: googletest-listener-test.cc:50
gtest.h
testing::internal::EventRecordingListener2::OnTestStart
void OnTestStart(const TestInfo &) override
Definition: googletest-listener-test.cc:158
testing::internal::EventRecordingListener::OnEnvironmentsTearDownEnd
void OnEnvironmentsTearDownEnd(const UnitTest &) override
Definition: googletest-listener-test.cc:104
testing::internal::EventRecordingListener::GetFullMethodName
std::string GetFullMethodName(const char *name)
Definition: googletest-listener-test.cc:121
EXPECT_EQ
#define EXPECT_EQ(val1, val2)
Definition: glog/src/googletest.h:155
testing::internal::EventRecordingListener2::OnTestSuiteStart
void OnTestSuiteStart(const TestSuite &) override
Definition: googletest-listener-test.cc:154
InitGoogleTest
_START_GOOGLE_NAMESPACE_ void InitGoogleTest(int *, char **)
Definition: glog/src/googletest.h:124
testing::internal::EventRecordingListener2::GetFullMethodName
std::string GetFullMethodName(const char *name)
Definition: googletest-listener-test.cc:195
testing::internal::EventRecordingListener2::OnEnvironmentsSetUpStart
void OnEnvironmentsSetUpStart(const UnitTest &) override
Definition: googletest-listener-test.cc:146
testing::internal::EventRecordingListener2::EventRecordingListener2
EventRecordingListener2(const char *name)
Definition: googletest-listener-test.cc:131
string
GLsizei const GLchar *const * string
Definition: glcorearb.h:3083
testing::internal::EnvironmentInvocationCatcher::SetUp
void SetUp() override
Definition: googletest-listener-test.cc:202
testing::Message
Definition: gtest-message.h:90
testing::Test
Definition: gtest.h:415
testing::internal::EventRecordingListener2::OnTestProgramEnd
void OnTestProgramEnd(const UnitTest &) override
Definition: googletest-listener-test.cc:190
GTEST_FLAG
#define GTEST_FLAG(name)
Definition: gtest-port.h:2251
GTEST_CHECK_
#define GTEST_CHECK_(condition)
Definition: gtest-port.h:1036
testing::internal::ListenerTest::SetUp
void SetUp() override
Definition: googletest-listener-test.cc:217
testing::internal::EventRecordingListener2::OnEnvironmentsTearDownEnd
void OnEnvironmentsTearDownEnd(const UnitTest &) override
Definition: googletest-listener-test.cc:178
testing::internal::EventRecordingListener::OnTestCaseEnd
void OnTestCaseEnd(const TestCase &) override
Definition: googletest-listener-test.cc:96
main
int main(int argc, char **argv)
Definition: googletest-listener-test.cc:266
testing::internal::EventRecordingListener::OnTestPartResult
void OnTestPartResult(const TestPartResult &) override
Definition: googletest-listener-test.cc:88
testing::Environment
Definition: gtest.h:1039
testing::internal::EventRecordingListener2::OnEnvironmentsTearDownStart
void OnEnvironmentsTearDownStart(const UnitTest &) override
Definition: googletest-listener-test.cc:174
RUN_ALL_TESTS
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
Definition: gtest.h:2502
testing::internal::EventRecordingListener2::OnTestIterationStart
void OnTestIterationStart(const UnitTest &, int iteration) override
Definition: googletest-listener-test.cc:138
testing::internal::EnvironmentInvocationCatcher
Definition: googletest-listener-test.cc:200
testing::internal::EventRecordingListener2
Definition: googletest-listener-test.cc:129
TestCase
Definition: output_test.h:31
testing::internal::TEST_F
TEST_F(ListenerTest, DoesFoo)
Definition: googletest-listener-test.cc:222
testing::internal::EventRecordingListener2::OnTestEnd
void OnTestEnd(const TestInfo &) override
Definition: googletest-listener-test.cc:166
testing::internal::EventRecordingListener::OnTestStart
void OnTestStart(const TestInfo &) override
Definition: googletest-listener-test.cc:84
i
int i
Definition: gmock-matchers_test.cc:764
testing::internal::EventRecordingListener::OnTestEnd
void OnTestEnd(const TestInfo &) override
Definition: googletest-listener-test.cc:92
testing::internal::ListenerTest::SetUpTestSuite
static void SetUpTestSuite()
Definition: googletest-listener-test.cc:209
testing::internal::ListenerTest
Definition: googletest-listener-test.cc:207
testing::internal::EventRecordingListener
Definition: googletest-listener-test.cc:55
testing::internal::ListenerTest::TearDownTestSuite
static void TearDownTestSuite()
Definition: googletest-listener-test.cc:213
testing::UnitTest
Definition: gtest.h:1251
testing::internal::EventRecordingListener::OnEnvironmentsSetUpEnd
void OnEnvironmentsSetUpEnd(const UnitTest &) override
Definition: googletest-listener-test.cc:76
VerifyResults
void VerifyResults(const std::vector< std::string > &data, const char *const *expected_data, size_t expected_data_size)
Definition: googletest-listener-test.cc:242
testing::internal::EventRecordingListener::OnTestIterationStart
void OnTestIterationStart(const UnitTest &, int iteration) override
Definition: googletest-listener-test.cc:64
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: glcorearb.h:2879
SUCCEED
#define SUCCEED()
Definition: gtest.h:1961
internal
Definition: any.pb.h:40
ASSERT_STREQ
#define ASSERT_STREQ(s1, s2)
Definition: gtest.h:2130
testing::internal::EventRecordingListener::OnEnvironmentsSetUpStart
void OnEnvironmentsSetUpStart(const UnitTest &) override
Definition: googletest-listener-test.cc:72
testing::AddGlobalTestEnvironment
Environment * AddGlobalTestEnvironment(Environment *env)
Definition: gtest.h:1468
testing::internal::EventRecordingListener2::OnTestProgramStart
void OnTestProgramStart(const UnitTest &) override
Definition: googletest-listener-test.cc:134
message
GLenum GLuint GLenum GLsizei const GLchar * message
Definition: glcorearb.h:2695
testing::internal::EventRecordingListener2::OnTestSuiteEnd
void OnTestSuiteEnd(const TestSuite &) override
Definition: googletest-listener-test.cc:170
testing::TestEventListener
Definition: gtest.h:1070
testing::TestSuite
Definition: gtest.h:830


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:52