statusor_test.cc
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
32 
33 #include <errno.h>
34 #include <memory>
35 
37 #include <gtest/gtest.h>
38 
39 namespace google {
40 namespace protobuf {
41 namespace util {
42 namespace {
43 
44 class Base1 {
45  public:
46  virtual ~Base1() {}
47  int pad;
48 };
49 
50 class Base2 {
51  public:
52  virtual ~Base2() {}
54 };
55 
56 class Derived : public Base1, public Base2 {
57  public:
58  virtual ~Derived() {}
60 };
61 
62 class CopyNoAssign {
63  public:
64  explicit CopyNoAssign(int value) : foo(value) {}
65  CopyNoAssign(const CopyNoAssign& other) : foo(other.foo) {}
66  int foo;
67  private:
68  const CopyNoAssign& operator=(const CopyNoAssign&);
69 };
70 
71 TEST(StatusOr, TestDefaultCtor) {
72  StatusOr<int> thing;
73  EXPECT_FALSE(thing.ok());
74  EXPECT_EQ(Status::UNKNOWN, thing.status());
75 }
76 
77 TEST(StatusOr, TestStatusCtor) {
78  StatusOr<int> thing(Status::CANCELLED);
79  EXPECT_FALSE(thing.ok());
80  EXPECT_EQ(Status::CANCELLED, thing.status());
81 }
82 
83 TEST(StatusOr, TestValueCtor) {
84  const int kI = 4;
85  StatusOr<int> thing(kI);
86  EXPECT_TRUE(thing.ok());
87  EXPECT_EQ(kI, thing.ValueOrDie());
88 }
89 
90 TEST(StatusOr, TestCopyCtorStatusOk) {
91  const int kI = 4;
92  StatusOr<int> original(kI);
93  StatusOr<int> copy(original);
94  EXPECT_EQ(original.status(), copy.status());
95  EXPECT_EQ(original.ValueOrDie(), copy.ValueOrDie());
96 }
97 
98 TEST(StatusOr, TestCopyCtorStatusNotOk) {
99  StatusOr<int> original(Status::CANCELLED);
100  StatusOr<int> copy(original);
101  EXPECT_EQ(original.status(), copy.status());
102 }
103 
104 TEST(StatusOr, TestCopyCtorStatusOKConverting) {
105  const int kI = 4;
106  StatusOr<int> original(kI);
107  StatusOr<double> copy(original);
108  EXPECT_EQ(original.status(), copy.status());
109  EXPECT_EQ(original.ValueOrDie(), copy.ValueOrDie());
110 }
111 
112 TEST(StatusOr, TestCopyCtorStatusNotOkConverting) {
113  StatusOr<int> original(Status::CANCELLED);
114  StatusOr<double> copy(original);
115  EXPECT_EQ(original.status(), copy.status());
116 }
117 
118 TEST(StatusOr, TestAssignmentStatusOk) {
119  const int kI = 4;
120  StatusOr<int> source(kI);
121  StatusOr<int> target;
122  target = source;
123  EXPECT_EQ(source.status(), target.status());
124  EXPECT_EQ(source.ValueOrDie(), target.ValueOrDie());
125 }
126 
127 TEST(StatusOr, TestAssignmentStatusNotOk) {
128  StatusOr<int> source(Status::CANCELLED);
129  StatusOr<int> target;
130  target = source;
131  EXPECT_EQ(source.status(), target.status());
132 }
133 
134 TEST(StatusOr, TestAssignmentStatusOKConverting) {
135  const int kI = 4;
136  StatusOr<int> source(kI);
137  StatusOr<double> target;
138  target = source;
139  EXPECT_EQ(source.status(), target.status());
140  EXPECT_DOUBLE_EQ(source.ValueOrDie(), target.ValueOrDie());
141 }
142 
143 TEST(StatusOr, TestAssignmentStatusNotOkConverting) {
144  StatusOr<int> source(Status::CANCELLED);
145  StatusOr<double> target;
146  target = source;
147  EXPECT_EQ(source.status(), target.status());
148 }
149 
150 TEST(StatusOr, TestStatus) {
151  StatusOr<int> good(4);
152  EXPECT_TRUE(good.ok());
153  StatusOr<int> bad(Status::CANCELLED);
154  EXPECT_FALSE(bad.ok());
155  EXPECT_EQ(Status::CANCELLED, bad.status());
156 }
157 
158 TEST(StatusOr, TestValue) {
159  const int kI = 4;
160  StatusOr<int> thing(kI);
161  EXPECT_EQ(kI, thing.ValueOrDie());
162 }
163 
164 TEST(StatusOr, TestValueConst) {
165  const int kI = 4;
166  const StatusOr<int> thing(kI);
167  EXPECT_EQ(kI, thing.ValueOrDie());
168 }
169 
170 TEST(StatusOr, TestPointerDefaultCtor) {
171  StatusOr<int*> thing;
172  EXPECT_FALSE(thing.ok());
173  EXPECT_EQ(Status::UNKNOWN, thing.status());
174 }
175 
176 TEST(StatusOr, TestPointerStatusCtor) {
177  StatusOr<int*> thing(Status::CANCELLED);
178  EXPECT_FALSE(thing.ok());
179  EXPECT_EQ(Status::CANCELLED, thing.status());
180 }
181 
182 TEST(StatusOr, TestPointerValueCtor) {
183  const int kI = 4;
184  StatusOr<const int*> thing(&kI);
185  EXPECT_TRUE(thing.ok());
186  EXPECT_EQ(&kI, thing.ValueOrDie());
187 }
188 
189 TEST(StatusOr, TestPointerCopyCtorStatusOk) {
190  const int kI = 0;
191  StatusOr<const int*> original(&kI);
192  StatusOr<const int*> copy(original);
193  EXPECT_EQ(original.status(), copy.status());
194  EXPECT_EQ(original.ValueOrDie(), copy.ValueOrDie());
195 }
196 
197 TEST(StatusOr, TestPointerCopyCtorStatusNotOk) {
198  StatusOr<int*> original(Status::CANCELLED);
199  StatusOr<int*> copy(original);
200  EXPECT_EQ(original.status(), copy.status());
201 }
202 
203 TEST(StatusOr, TestPointerCopyCtorStatusOKConverting) {
204  Derived derived;
205  StatusOr<Derived*> original(&derived);
206  StatusOr<Base2*> copy(original);
207  EXPECT_EQ(original.status(), copy.status());
208  EXPECT_EQ(static_cast<const Base2*>(original.ValueOrDie()),
209  copy.ValueOrDie());
210 }
211 
212 TEST(StatusOr, TestPointerCopyCtorStatusNotOkConverting) {
213  StatusOr<Derived*> original(Status::CANCELLED);
214  StatusOr<Base2*> copy(original);
215  EXPECT_EQ(original.status(), copy.status());
216 }
217 
218 TEST(StatusOr, TestPointerAssignmentStatusOk) {
219  const int kI = 0;
220  StatusOr<const int*> source(&kI);
221  StatusOr<const int*> target;
222  target = source;
223  EXPECT_EQ(source.status(), target.status());
224  EXPECT_EQ(source.ValueOrDie(), target.ValueOrDie());
225 }
226 
227 TEST(StatusOr, TestPointerAssignmentStatusNotOk) {
228  StatusOr<int*> source(Status::CANCELLED);
229  StatusOr<int*> target;
230  target = source;
231  EXPECT_EQ(source.status(), target.status());
232 }
233 
234 TEST(StatusOr, TestPointerAssignmentStatusOKConverting) {
235  Derived derived;
236  StatusOr<Derived*> source(&derived);
237  StatusOr<Base2*> target;
238  target = source;
239  EXPECT_EQ(source.status(), target.status());
240  EXPECT_EQ(static_cast<const Base2*>(source.ValueOrDie()),
241  target.ValueOrDie());
242 }
243 
244 TEST(StatusOr, TestPointerAssignmentStatusNotOkConverting) {
245  StatusOr<Derived*> source(Status::CANCELLED);
246  StatusOr<Base2*> target;
247  target = source;
248  EXPECT_EQ(source.status(), target.status());
249 }
250 
251 TEST(StatusOr, TestPointerStatus) {
252  const int kI = 0;
253  StatusOr<const int*> good(&kI);
254  EXPECT_TRUE(good.ok());
255  StatusOr<const int*> bad(Status::CANCELLED);
256  EXPECT_EQ(Status::CANCELLED, bad.status());
257 }
258 
259 TEST(StatusOr, TestPointerValue) {
260  const int kI = 0;
261  StatusOr<const int*> thing(&kI);
262  EXPECT_EQ(&kI, thing.ValueOrDie());
263 }
264 
265 TEST(StatusOr, TestPointerValueConst) {
266  const int kI = 0;
267  const StatusOr<const int*> thing(&kI);
268  EXPECT_EQ(&kI, thing.ValueOrDie());
269 }
270 
271 } // namespace
272 } // namespace util
273 } // namespace protobuf
274 } // namespace google
yetotherpad
int yetotherpad
Definition: statusor_test.cc:53
google::protobuf::util::TEST
TEST(DelimitedMessageUtilTest, DelimitedMessages)
Definition: delimited_message_util_test.cc:47
gtest.h
EXPECT_EQ
#define EXPECT_EQ(val1, val2)
Definition: glog/src/googletest.h:155
foo
Definition: googletest-output-test_.cc:534
statusor.h
foo
int foo
Definition: statusor_test.cc:66
target
GLenum target
Definition: glcorearb.h:3739
google::protobuf::util::Status::UNKNOWN
static const Status UNKNOWN
Definition: status.h:84
EXPECT_TRUE
#define EXPECT_TRUE(cond)
Definition: glog/src/googletest.h:137
source
GLsizei GLsizei GLchar * source
Definition: glcorearb.h:3072
google::protobuf::util::Status::CANCELLED
static const Status CANCELLED
Definition: status.h:83
evenmorepad
int evenmorepad
Definition: statusor_test.cc:59
googletest.h
EXPECT_FALSE
#define EXPECT_FALSE(cond)
Definition: glog/src/googletest.h:145
pad
int pad
Definition: statusor_test.cc:47
value
GLsizei const GLfloat * value
Definition: glcorearb.h:3093
google
Definition: data_proto2_to_proto3_util.h:11
EXPECT_DOUBLE_EQ
#define EXPECT_DOUBLE_EQ(val1, val2)
Definition: glog/src/googletest.h:176


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