xref: /aosp_15_r20/external/pigweed/pw_unit_test/googletest_handler_adapter.cc (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1 // Copyright 2023 The Pigweed Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4 // use this file except in compliance with the License. You may obtain a copy of
5 // the License at
6 //
7 //     https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 // License for the specific language governing permissions and limitations under
13 // the License.
14 
15 #include "pw_unit_test/googletest_handler_adapter.h"
16 
17 #include <cstdlib>
18 
19 namespace pw::unit_test {
20 
RegisterEventHandler(EventHandler * event_handler)21 void RegisterEventHandler(EventHandler* event_handler) {
22   static testing::TestEventListener* gTestListener = nullptr;
23   auto& listeners = testing::UnitTest::GetInstance()->listeners();
24   if (!gTestListener) {
25     gTestListener = listeners.default_result_printer();
26   }
27   if (gTestListener) {
28     listeners.Release(gTestListener);
29     delete gTestListener;
30   }
31   if (event_handler) {
32     gTestListener = new pw::unit_test::GoogleTestHandlerAdapter(*event_handler);
33     listeners.Append(gTestListener);
34   }
35 }
36 
OnTestProgramStart(const testing::UnitTest & unit_test)37 void GoogleTestHandlerAdapter::OnTestProgramStart(
38     const testing::UnitTest& unit_test) {
39   handler_.TestProgramStart(
40       {unit_test.test_to_run_count(), unit_test.test_suite_to_run_count(), {}});
41 }
42 
OnEnvironmentsSetUpEnd(const::testing::UnitTest &)43 void GoogleTestHandlerAdapter::OnEnvironmentsSetUpEnd(
44     const ::testing::UnitTest&) {
45   handler_.EnvironmentsSetUpEnd();
46 }
47 
OnTestSuiteStart(const::testing::TestSuite & ts)48 void GoogleTestHandlerAdapter::OnTestSuiteStart(
49     const ::testing::TestSuite& ts) {
50   handler_.TestSuiteStart({ts.name(), ts.test_to_run_count()});
51 }
52 
OnTestStart(const::testing::TestInfo & ti)53 void GoogleTestHandlerAdapter::OnTestStart(const ::testing::TestInfo& ti) {
54   handler_.TestCaseStart({ti.test_suite_name(), ti.name(), ti.file()});
55 }
56 
OnTestPartResult(const::testing::TestPartResult & tpr)57 void GoogleTestHandlerAdapter::OnTestPartResult(
58     const ::testing::TestPartResult& tpr) {
59   handler_.TestCaseExpect(
60       {.suite_name = "", .test_name = "", .file_name = tpr.file_name()},
61       {.expression = "",
62        .evaluated_expression = tpr.summary(),
63        .line_number = tpr.line_number(),
64        .success = tpr.passed() || tpr.skipped()});
65 }
66 
OnTestEnd(const::testing::TestInfo & ti)67 void GoogleTestHandlerAdapter::OnTestEnd(const ::testing::TestInfo& ti) {
68   auto result = ti.result()->Passed()
69                     ? TestResult::kSuccess
70                     : (ti.result()->Failed() ? TestResult::kFailure
71                                              : TestResult::kSkipped);
72 
73   handler_.TestCaseEnd({ti.test_suite_name(), ti.name(), ti.file()}, result);
74 }
75 
OnTestSuiteEnd(const::testing::TestSuite & ts)76 void GoogleTestHandlerAdapter::OnTestSuiteEnd(const ::testing::TestSuite& ts) {
77   handler_.TestSuiteEnd({ts.name(), ts.test_to_run_count()});
78 }
79 
OnEnvironmentsTearDownEnd(const::testing::UnitTest &)80 void GoogleTestHandlerAdapter::OnEnvironmentsTearDownEnd(
81     const ::testing::UnitTest&) {
82   handler_.EnvironmentsTearDownEnd();
83 }
84 
OnTestProgramEnd(const::testing::UnitTest & unit_test)85 void GoogleTestHandlerAdapter::OnTestProgramEnd(
86     const ::testing::UnitTest& unit_test) {
87   handler_.TestProgramEnd({unit_test.test_to_run_count(),
88                            unit_test.test_suite_to_run_count(),
89                            {unit_test.successful_test_count(),
90                             unit_test.failed_test_count(),
91                             unit_test.skipped_test_count(),
92                             unit_test.disabled_test_count()}});
93 }
94 
95 }  // namespace pw::unit_test
96