xref: /aosp_15_r20/external/pigweed/pw_unit_test/googletest_test_matchers_test.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 #include "pw_unit_test/googletest_test_matchers.h"
15 
16 #include <cstdlib>
17 
18 #include "gtest/gtest-spi.h"
19 #include "pw_status/status.h"
20 
21 namespace {
22 
23 using ::pw::OkStatus;
24 using ::pw::Result;
25 using ::pw::Status;
26 using ::pw::StatusWithSize;
27 using ::pw::unit_test::IsOkAndHolds;
28 using ::pw::unit_test::StatusIs;
29 using ::testing::Eq;
30 using ::testing::Not;
31 
TEST(TestMatchers,StatusIsSuccess)32 TEST(TestMatchers, StatusIsSuccess) {
33   EXPECT_THAT(OkStatus(), StatusIs(OkStatus()));
34   EXPECT_THAT(Status::Cancelled(), StatusIs(Status::Cancelled()));
35   EXPECT_THAT(Status::Unknown(), StatusIs(Status::Unknown()));
36   EXPECT_THAT(Status::InvalidArgument(), StatusIs(Status::InvalidArgument()));
37   EXPECT_THAT(Status::DeadlineExceeded(), StatusIs(Status::DeadlineExceeded()));
38   EXPECT_THAT(Status::NotFound(), StatusIs(Status::NotFound()));
39   EXPECT_THAT(Status::AlreadyExists(), StatusIs(Status::AlreadyExists()));
40   EXPECT_THAT(Status::PermissionDenied(), StatusIs(Status::PermissionDenied()));
41   EXPECT_THAT(Status::ResourceExhausted(),
42               StatusIs(Status::ResourceExhausted()));
43   EXPECT_THAT(Status::FailedPrecondition(),
44               StatusIs(Status::FailedPrecondition()));
45   EXPECT_THAT(Status::Aborted(), StatusIs(Status::Aborted()));
46   EXPECT_THAT(Status::OutOfRange(), StatusIs(Status::OutOfRange()));
47   EXPECT_THAT(Status::Unimplemented(), StatusIs(Status::Unimplemented()));
48   EXPECT_THAT(Status::Internal(), StatusIs(Status::Internal()));
49   EXPECT_THAT(Status::Unavailable(), StatusIs(Status::Unavailable()));
50   EXPECT_THAT(Status::DataLoss(), StatusIs(Status::DataLoss()));
51   EXPECT_THAT(Status::Unauthenticated(), StatusIs(Status::Unauthenticated()));
52 }
53 
TEST(TestMatchers,StatusIsSuccessStatusWithSize)54 TEST(TestMatchers, StatusIsSuccessStatusWithSize) {
55   EXPECT_THAT(StatusWithSize(), StatusIs(OkStatus()));
56   EXPECT_THAT(StatusWithSize::Cancelled(), StatusIs(Status::Cancelled()));
57   EXPECT_THAT(StatusWithSize::Unknown(), StatusIs(Status::Unknown()));
58   EXPECT_THAT(StatusWithSize::InvalidArgument(),
59               StatusIs(Status::InvalidArgument()));
60   EXPECT_THAT(StatusWithSize::DeadlineExceeded(),
61               StatusIs(Status::DeadlineExceeded()));
62   EXPECT_THAT(StatusWithSize::NotFound(), StatusIs(Status::NotFound()));
63   EXPECT_THAT(StatusWithSize::AlreadyExists(),
64               StatusIs(Status::AlreadyExists()));
65   EXPECT_THAT(StatusWithSize::PermissionDenied(),
66               StatusIs(Status::PermissionDenied()));
67   EXPECT_THAT(StatusWithSize::ResourceExhausted(),
68               StatusIs(Status::ResourceExhausted()));
69   EXPECT_THAT(StatusWithSize::FailedPrecondition(),
70               StatusIs(Status::FailedPrecondition()));
71   EXPECT_THAT(StatusWithSize::Aborted(), StatusIs(Status::Aborted()));
72   EXPECT_THAT(StatusWithSize::OutOfRange(), StatusIs(Status::OutOfRange()));
73   EXPECT_THAT(StatusWithSize::Unimplemented(),
74               StatusIs(Status::Unimplemented()));
75   EXPECT_THAT(StatusWithSize::Internal(), StatusIs(Status::Internal()));
76   EXPECT_THAT(StatusWithSize::Unavailable(), StatusIs(Status::Unavailable()));
77   EXPECT_THAT(StatusWithSize::DataLoss(), StatusIs(Status::DataLoss()));
78   EXPECT_THAT(StatusWithSize::Unauthenticated(),
79               StatusIs(Status::Unauthenticated()));
80 }
81 
TEST(TestMatchers,StatusIsSuccessOkResult)82 TEST(TestMatchers, StatusIsSuccessOkResult) {
83   const Result<int> result = 46;
84   EXPECT_THAT(result, StatusIs(OkStatus()));
85 }
86 
TEST(TestMatchers,StatusIsSuccessResult)87 TEST(TestMatchers, StatusIsSuccessResult) {
88   EXPECT_THAT(Result<int>(Status::Cancelled()), StatusIs(Status::Cancelled()));
89   EXPECT_THAT(Result<int>(Status::Unknown()), StatusIs(Status::Unknown()));
90   EXPECT_THAT(Result<int>(Status::InvalidArgument()),
91               StatusIs(Status::InvalidArgument()));
92   EXPECT_THAT(Result<int>(Status::DeadlineExceeded()),
93               StatusIs(Status::DeadlineExceeded()));
94   EXPECT_THAT(Result<int>(Status::NotFound()), StatusIs(Status::NotFound()));
95   EXPECT_THAT(Result<int>(Status::AlreadyExists()),
96               StatusIs(Status::AlreadyExists()));
97   EXPECT_THAT(Result<int>(Status::PermissionDenied()),
98               StatusIs(Status::PermissionDenied()));
99   EXPECT_THAT(Result<int>(Status::ResourceExhausted()),
100               StatusIs(Status::ResourceExhausted()));
101   EXPECT_THAT(Result<int>(Status::FailedPrecondition()),
102               StatusIs(Status::FailedPrecondition()));
103   EXPECT_THAT(Result<int>(Status::Aborted()), StatusIs(Status::Aborted()));
104   EXPECT_THAT(Result<int>(Status::OutOfRange()),
105               StatusIs(Status::OutOfRange()));
106   EXPECT_THAT(Result<int>(Status::Unimplemented()),
107               StatusIs(Status::Unimplemented()));
108   EXPECT_THAT(Result<int>(Status::Internal()), StatusIs(Status::Internal()));
109   EXPECT_THAT(Result<int>(Status::Unavailable()),
110               StatusIs(Status::Unavailable()));
111   EXPECT_THAT(Result<int>(Status::DataLoss()), StatusIs(Status::DataLoss()));
112   EXPECT_THAT(Result<int>(Status::Unauthenticated()),
113               StatusIs(Status::Unauthenticated()));
114 }
115 
TEST(IsOkAndHolds,StatusWithSize)116 TEST(IsOkAndHolds, StatusWithSize) {
117   const auto status_with_size = StatusWithSize{OkStatus(), 42};
118   EXPECT_THAT(status_with_size, IsOkAndHolds(Eq(42u)));
119 }
120 
TEST(IsOkAndHolds,Result)121 TEST(IsOkAndHolds, Result) {
122   auto value = Result<int>{42};
123   EXPECT_THAT(value, IsOkAndHolds(Eq(42)));
124 }
125 
TEST(IsOkAndHolds,BadStatusWithSize)126 TEST(IsOkAndHolds, BadStatusWithSize) {
127   const auto status_with_size = StatusWithSize{Status::InvalidArgument(), 0};
128   EXPECT_THAT(status_with_size, Not(IsOkAndHolds(Eq(42u))));
129 }
130 
TEST(IsOkAndHolds,WrongStatusWithSize)131 TEST(IsOkAndHolds, WrongStatusWithSize) {
132   const auto status_with_size = StatusWithSize{OkStatus(), 100};
133   EXPECT_THAT(status_with_size, IsOkAndHolds(Not(Eq(42u))));
134   EXPECT_THAT(status_with_size, Not(IsOkAndHolds(Eq(42u))));
135 }
136 
TEST(IsOkAndHolds,BadResult)137 TEST(IsOkAndHolds, BadResult) {
138   const auto value = Result<int>{Status::InvalidArgument()};
139   EXPECT_THAT(value, Not(IsOkAndHolds(Eq(42))));
140 }
141 
TEST(IsOkAndHolds,WrongResult)142 TEST(IsOkAndHolds, WrongResult) {
143   const auto value = Result<int>{100};
144   EXPECT_THAT(value, IsOkAndHolds(Not(Eq(42))));
145   EXPECT_THAT(value, Not(IsOkAndHolds(Eq(42))));
146 }
147 
148 // The following test contents are disabled and is only for checking what
149 // failure cases would look like. For example, when enabling the test,
150 // the output is:
151 //
152 // ERR  pw_unit_test/googletest_test_matchers_test.cc:50: Failure
153 // ERR        Expected:
154 // ERR          Actual: Value of: OkStatus()
155 // Expected: has status UNKNOWN
156 //   Actual: 4-byte object <00-00 00-00>, which has status OK
TEST(TestMatchers,SampleFailures)157 TEST(TestMatchers, SampleFailures) {
158   if (false) {
159     EXPECT_THAT(OkStatus(), StatusIs(Status::Unknown()));
160   }
161 }
162 
163 }  // namespace
164