Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1175)

Side by Side Diff: mojo/public/cpp/bindings/tests/struct_unittest.cc

Issue 1997473005: Remove requirement that mojo::Environment be instantiated. (Closed) Base URL: https://github.com/domokit/mojo.git@work797_no_utility_tls
Patch Set: SetDefaultAsyncWaiter Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string.h> 5 #include <string.h>
6 #include <type_traits> 6 #include <type_traits>
7 7
8 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" 8 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
9 #include "mojo/public/cpp/bindings/lib/validation_errors.h" 9 #include "mojo/public/cpp/bindings/lib/validation_errors.h"
10 #include "mojo/public/cpp/environment/environment.h"
11 #include "mojo/public/cpp/system/message_pipe.h" 10 #include "mojo/public/cpp/system/message_pipe.h"
12 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" 11 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h"
13 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
14 13
15 namespace mojo { 14 namespace mojo {
16 namespace test { 15 namespace test {
17 namespace { 16 namespace {
18 17
19 static_assert(std::is_same<std::underlying_type<ScopedConstants::EType>::type, 18 static_assert(std::is_same<std::underlying_type<ScopedConstants::EType>::type,
20 int32_t>::value, 19 int32_t>::value,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 72
74 OutputDataType output_data = reinterpret_cast<OutputDataType>(data); 73 OutputDataType output_data = reinterpret_cast<OutputDataType>(data);
75 output_data->DecodePointersAndHandles(&handles); 74 output_data->DecodePointersAndHandles(&handles);
76 75
77 using RawUType = typename mojo::internal::RemoveStructPtr<U>::type; 76 using RawUType = typename mojo::internal::RemoveStructPtr<U>::type;
78 U output(RawUType::New()); 77 U output(RawUType::New());
79 Deserialize_(output_data, output.get()); 78 Deserialize_(output_data, output.get());
80 return output; 79 return output;
81 } 80 }
82 81
83 class StructTest : public testing::Test {
84 public:
85 ~StructTest() override {}
86
87 private:
88 Environment env_;
89 };
90
91 } // namespace 82 } // namespace
92 83
93 TEST_F(StructTest, Rect) { 84 TEST(StructTest, Rect) {
94 RectPtr rect; 85 RectPtr rect;
95 EXPECT_FALSE(rect); 86 EXPECT_FALSE(rect);
96 EXPECT_TRUE(rect.is_null()); 87 EXPECT_TRUE(rect.is_null());
97 EXPECT_TRUE(!rect); 88 EXPECT_TRUE(!rect);
98 EXPECT_FALSE(rect); 89 EXPECT_FALSE(rect);
99 90
100 rect = nullptr; 91 rect = nullptr;
101 EXPECT_FALSE(rect); 92 EXPECT_FALSE(rect);
102 EXPECT_TRUE(rect.is_null()); 93 EXPECT_TRUE(rect.is_null());
103 EXPECT_TRUE(!rect); 94 EXPECT_TRUE(!rect);
104 EXPECT_FALSE(rect); 95 EXPECT_FALSE(rect);
105 96
106 rect = MakeRect(); 97 rect = MakeRect();
107 EXPECT_TRUE(rect); 98 EXPECT_TRUE(rect);
108 EXPECT_FALSE(rect.is_null()); 99 EXPECT_FALSE(rect.is_null());
109 EXPECT_FALSE(!rect); 100 EXPECT_FALSE(!rect);
110 EXPECT_TRUE(rect); 101 EXPECT_TRUE(rect);
111 102
112 RectPtr null_rect = nullptr; 103 RectPtr null_rect = nullptr;
113 EXPECT_FALSE(null_rect); 104 EXPECT_FALSE(null_rect);
114 EXPECT_TRUE(null_rect.is_null()); 105 EXPECT_TRUE(null_rect.is_null());
115 EXPECT_TRUE(!null_rect); 106 EXPECT_TRUE(!null_rect);
116 EXPECT_FALSE(null_rect); 107 EXPECT_FALSE(null_rect);
117 108
118 CheckRect(*rect); 109 CheckRect(*rect);
119 } 110 }
120 111
121 TEST_F(StructTest, Clone) { 112 TEST(StructTest, Clone) {
122 NamedRegionPtr region; 113 NamedRegionPtr region;
123 114
124 NamedRegionPtr clone_region = region.Clone(); 115 NamedRegionPtr clone_region = region.Clone();
125 EXPECT_TRUE(clone_region.is_null()); 116 EXPECT_TRUE(clone_region.is_null());
126 117
127 region = NamedRegion::New(); 118 region = NamedRegion::New();
128 clone_region = region.Clone(); 119 clone_region = region.Clone();
129 EXPECT_TRUE(clone_region->name.is_null()); 120 EXPECT_TRUE(clone_region->name.is_null());
130 EXPECT_TRUE(clone_region->rects.is_null()); 121 EXPECT_TRUE(clone_region->rects.is_null());
131 122
132 region->name = "hello world"; 123 region->name = "hello world";
133 clone_region = region.Clone(); 124 clone_region = region.Clone();
134 EXPECT_EQ(region->name, clone_region->name); 125 EXPECT_EQ(region->name, clone_region->name);
135 126
136 region->rects = Array<RectPtr>::New(2); 127 region->rects = Array<RectPtr>::New(2);
137 region->rects[1] = MakeRect(); 128 region->rects[1] = MakeRect();
138 clone_region = region.Clone(); 129 clone_region = region.Clone();
139 EXPECT_EQ(2u, clone_region->rects.size()); 130 EXPECT_EQ(2u, clone_region->rects.size());
140 EXPECT_TRUE(clone_region->rects[0].is_null()); 131 EXPECT_TRUE(clone_region->rects[0].is_null());
141 CheckRect(*clone_region->rects[1]); 132 CheckRect(*clone_region->rects[1]);
142 133
143 // NoDefaultFieldValues contains handles, so Clone() is not available, but 134 // NoDefaultFieldValues contains handles, so Clone() is not available, but
144 // NoDefaultFieldValuesPtr should still compile. 135 // NoDefaultFieldValuesPtr should still compile.
145 NoDefaultFieldValuesPtr no_default_field_values(NoDefaultFieldValues::New()); 136 NoDefaultFieldValuesPtr no_default_field_values(NoDefaultFieldValues::New());
146 EXPECT_FALSE(no_default_field_values->f13.is_valid()); 137 EXPECT_FALSE(no_default_field_values->f13.is_valid());
147 } 138 }
148 139
149 // Serialization test of a struct with no pointer or handle members. 140 // Serialization test of a struct with no pointer or handle members.
150 TEST_F(StructTest, Serialization_Basic) { 141 TEST(StructTest, Serialization_Basic) {
151 RectPtr rect(MakeRect()); 142 RectPtr rect(MakeRect());
152 143
153 size_t size = GetSerializedSize_(*rect); 144 size_t size = GetSerializedSize_(*rect);
154 EXPECT_EQ(8U + 16U, size); 145 EXPECT_EQ(8U + 16U, size);
155 146
156 mojo::internal::FixedBufferForTesting buf(size); 147 mojo::internal::FixedBufferForTesting buf(size);
157 internal::Rect_Data* data; 148 internal::Rect_Data* data;
158 EXPECT_EQ(mojo::internal::ValidationError::NONE, 149 EXPECT_EQ(mojo::internal::ValidationError::NONE,
159 Serialize_(rect.get(), &buf, &data)); 150 Serialize_(rect.get(), &buf, &data));
160 151
161 RectPtr rect2(Rect::New()); 152 RectPtr rect2(Rect::New());
162 Deserialize_(data, rect2.get()); 153 Deserialize_(data, rect2.get());
163 154
164 CheckRect(*rect2); 155 CheckRect(*rect2);
165 } 156 }
166 157
167 // Construction of a struct with struct pointers from null. 158 // Construction of a struct with struct pointers from null.
168 TEST_F(StructTest, Construction_StructPointers) { 159 TEST(StructTest, Construction_StructPointers) {
169 RectPairPtr pair; 160 RectPairPtr pair;
170 EXPECT_TRUE(pair.is_null()); 161 EXPECT_TRUE(pair.is_null());
171 162
172 pair = RectPair::New(); 163 pair = RectPair::New();
173 EXPECT_FALSE(pair.is_null()); 164 EXPECT_FALSE(pair.is_null());
174 EXPECT_TRUE(pair->first.is_null()); 165 EXPECT_TRUE(pair->first.is_null());
175 EXPECT_TRUE(pair->first.is_null()); 166 EXPECT_TRUE(pair->first.is_null());
176 167
177 pair = nullptr; 168 pair = nullptr;
178 EXPECT_TRUE(pair.is_null()); 169 EXPECT_TRUE(pair.is_null());
179 } 170 }
180 171
181 // Serialization test of a struct with struct pointers. 172 // Serialization test of a struct with struct pointers.
182 TEST_F(StructTest, Serialization_StructPointers) { 173 TEST(StructTest, Serialization_StructPointers) {
183 RectPairPtr pair(RectPair::New()); 174 RectPairPtr pair(RectPair::New());
184 pair->first = MakeRect(); 175 pair->first = MakeRect();
185 pair->second = MakeRect(); 176 pair->second = MakeRect();
186 177
187 size_t size = GetSerializedSize_(*pair); 178 size_t size = GetSerializedSize_(*pair);
188 EXPECT_EQ(8U + 16U + 2 * (8U + 16U), size); 179 EXPECT_EQ(8U + 16U + 2 * (8U + 16U), size);
189 180
190 mojo::internal::FixedBufferForTesting buf(size); 181 mojo::internal::FixedBufferForTesting buf(size);
191 internal::RectPair_Data* data; 182 internal::RectPair_Data* data;
192 EXPECT_EQ(mojo::internal::ValidationError::NONE, 183 EXPECT_EQ(mojo::internal::ValidationError::NONE,
193 Serialize_(pair.get(), &buf, &data)); 184 Serialize_(pair.get(), &buf, &data));
194 185
195 RectPairPtr pair2(RectPair::New()); 186 RectPairPtr pair2(RectPair::New());
196 Deserialize_(data, pair2.get()); 187 Deserialize_(data, pair2.get());
197 188
198 CheckRect(*pair2->first); 189 CheckRect(*pair2->first);
199 CheckRect(*pair2->second); 190 CheckRect(*pair2->second);
200 } 191 }
201 192
202 // Serialization test of a struct with an array member. 193 // Serialization test of a struct with an array member.
203 TEST_F(StructTest, Serialization_ArrayPointers) { 194 TEST(StructTest, Serialization_ArrayPointers) {
204 NamedRegionPtr region(NamedRegion::New()); 195 NamedRegionPtr region(NamedRegion::New());
205 region->name = "region"; 196 region->name = "region";
206 region->rects = Array<RectPtr>::New(4); 197 region->rects = Array<RectPtr>::New(4);
207 for (size_t i = 0; i < region->rects.size(); ++i) 198 for (size_t i = 0; i < region->rects.size(); ++i)
208 region->rects[i] = MakeRect(static_cast<int32_t>(i) + 1); 199 region->rects[i] = MakeRect(static_cast<int32_t>(i) + 1);
209 200
210 size_t size = GetSerializedSize_(*region); 201 size_t size = GetSerializedSize_(*region);
211 EXPECT_EQ(8U + // header 202 EXPECT_EQ(8U + // header
212 8U + // name pointer 203 8U + // name pointer
213 8U + // rects pointer 204 8U + // rects pointer
(...skipping 14 matching lines...) Expand all
228 Deserialize_(data, region2.get()); 219 Deserialize_(data, region2.get());
229 220
230 EXPECT_EQ(String("region"), region2->name); 221 EXPECT_EQ(String("region"), region2->name);
231 222
232 EXPECT_EQ(4U, region2->rects.size()); 223 EXPECT_EQ(4U, region2->rects.size());
233 for (size_t i = 0; i < region2->rects.size(); ++i) 224 for (size_t i = 0; i < region2->rects.size(); ++i)
234 CheckRect(*region2->rects[i], static_cast<int32_t>(i) + 1); 225 CheckRect(*region2->rects[i], static_cast<int32_t>(i) + 1);
235 } 226 }
236 227
237 // Serialization test of a struct with null array pointers. 228 // Serialization test of a struct with null array pointers.
238 TEST_F(StructTest, Serialization_NullArrayPointers) { 229 TEST(StructTest, Serialization_NullArrayPointers) {
239 NamedRegionPtr region(NamedRegion::New()); 230 NamedRegionPtr region(NamedRegion::New());
240 EXPECT_TRUE(region->name.is_null()); 231 EXPECT_TRUE(region->name.is_null());
241 EXPECT_TRUE(region->rects.is_null()); 232 EXPECT_TRUE(region->rects.is_null());
242 233
243 size_t size = GetSerializedSize_(*region); 234 size_t size = GetSerializedSize_(*region);
244 EXPECT_EQ(8U + // header 235 EXPECT_EQ(8U + // header
245 8U + // name pointer 236 8U + // name pointer
246 8U, // rects pointer 237 8U, // rects pointer
247 size); 238 size);
248 239
249 mojo::internal::FixedBufferForTesting buf(size); 240 mojo::internal::FixedBufferForTesting buf(size);
250 internal::NamedRegion_Data* data; 241 internal::NamedRegion_Data* data;
251 EXPECT_EQ(mojo::internal::ValidationError::NONE, 242 EXPECT_EQ(mojo::internal::ValidationError::NONE,
252 Serialize_(region.get(), &buf, &data)); 243 Serialize_(region.get(), &buf, &data));
253 244
254 NamedRegionPtr region2(NamedRegion::New()); 245 NamedRegionPtr region2(NamedRegion::New());
255 Deserialize_(data, region2.get()); 246 Deserialize_(data, region2.get());
256 247
257 EXPECT_TRUE(region2->name.is_null()); 248 EXPECT_TRUE(region2->name.is_null());
258 EXPECT_TRUE(region2->rects.is_null()); 249 EXPECT_TRUE(region2->rects.is_null());
259 } 250 }
260 251
261 TEST_F(StructTest, Serialization_InterfaceRequest) { 252 TEST(StructTest, Serialization_InterfaceRequest) {
262 ContainsInterfaceRequest iface_req_struct; 253 ContainsInterfaceRequest iface_req_struct;
263 254
264 auto size = GetSerializedSize_(iface_req_struct); 255 auto size = GetSerializedSize_(iface_req_struct);
265 EXPECT_EQ(8U // struct header 256 EXPECT_EQ(8U // struct header
266 + 4U // interface request handle 257 + 4U // interface request handle
267 + 4U, // interface request nullable handle 258 + 4U, // interface request nullable handle
268 size); 259 size);
269 260
270 mojo::internal::FixedBufferForTesting buf(size * 2); 261 mojo::internal::FixedBufferForTesting buf(size * 2);
271 ContainsInterfaceRequest::Data_* data; 262 ContainsInterfaceRequest::Data_* data;
272 263
273 // Test failure when non-nullable interface request is null. 264 // Test failure when non-nullable interface request is null.
274 EXPECT_EQ(mojo::internal::ValidationError::UNEXPECTED_INVALID_HANDLE, 265 EXPECT_EQ(mojo::internal::ValidationError::UNEXPECTED_INVALID_HANDLE,
275 Serialize_(&iface_req_struct, &buf, &data)); 266 Serialize_(&iface_req_struct, &buf, &data));
276 267
277 SomeInterfacePtr i_ptr; 268 SomeInterfacePtr i_ptr;
278 iface_req_struct.req = GetProxy(&i_ptr); 269 iface_req_struct.req = GetProxy(&i_ptr);
279 EXPECT_TRUE(iface_req_struct.req.is_pending()); 270 EXPECT_TRUE(iface_req_struct.req.is_pending());
280 271
281 EXPECT_EQ(mojo::internal::ValidationError::NONE, 272 EXPECT_EQ(mojo::internal::ValidationError::NONE,
282 Serialize_(&iface_req_struct, &buf, &data)); 273 Serialize_(&iface_req_struct, &buf, &data));
283 EXPECT_FALSE(iface_req_struct.req.is_pending()); 274 EXPECT_FALSE(iface_req_struct.req.is_pending());
284 275
285 Deserialize_(data, &iface_req_struct); 276 Deserialize_(data, &iface_req_struct);
286 EXPECT_TRUE(iface_req_struct.req.is_pending()); 277 EXPECT_TRUE(iface_req_struct.req.is_pending());
287 } 278 }
288 279
289 // Tests deserializing structs as a newer version. 280 // Tests deserializing structs as a newer version.
290 TEST_F(StructTest, Versioning_OldToNew) { 281 TEST(StructTest, Versioning_OldToNew) {
291 { 282 {
292 MultiVersionStructV0Ptr input(MultiVersionStructV0::New()); 283 MultiVersionStructV0Ptr input(MultiVersionStructV0::New());
293 input->f_int32 = 123; 284 input->f_int32 = 123;
294 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); 285 MultiVersionStructPtr expected_output(MultiVersionStruct::New());
295 expected_output->f_int32 = 123; 286 expected_output->f_int32 = 123;
296 287
297 MultiVersionStructPtr output = 288 MultiVersionStructPtr output =
298 SerializeAndDeserialize<MultiVersionStructPtr>(input.Pass()); 289 SerializeAndDeserialize<MultiVersionStructPtr>(input.Pass());
299 EXPECT_TRUE(output); 290 EXPECT_TRUE(output);
300 EXPECT_TRUE(output->Equals(*expected_output)); 291 EXPECT_TRUE(output->Equals(*expected_output));
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 MultiVersionStructPtr output = 371 MultiVersionStructPtr output =
381 SerializeAndDeserialize<MultiVersionStructPtr>(input.Pass()); 372 SerializeAndDeserialize<MultiVersionStructPtr>(input.Pass());
382 EXPECT_TRUE(output); 373 EXPECT_TRUE(output);
383 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); 374 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value());
384 output->f_message_pipe.reset(); 375 output->f_message_pipe.reset();
385 EXPECT_TRUE(output->Equals(*expected_output)); 376 EXPECT_TRUE(output->Equals(*expected_output));
386 } 377 }
387 } 378 }
388 379
389 // Tests deserializing structs as an older version. 380 // Tests deserializing structs as an older version.
390 TEST_F(StructTest, Versioning_NewToOld) { 381 TEST(StructTest, Versioning_NewToOld) {
391 { 382 {
392 MultiVersionStructPtr input = MakeMultiVersionStruct(); 383 MultiVersionStructPtr input = MakeMultiVersionStruct();
393 MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New()); 384 MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New());
394 expected_output->f_int32 = 123; 385 expected_output->f_int32 = 123;
395 expected_output->f_rect = MakeRect(5); 386 expected_output->f_rect = MakeRect(5);
396 expected_output->f_string = "hello"; 387 expected_output->f_string = "hello";
397 expected_output->f_array = Array<int8_t>::New(3); 388 expected_output->f_array = Array<int8_t>::New(3);
398 expected_output->f_array[0] = 10; 389 expected_output->f_array[0] = 10;
399 expected_output->f_array[1] = 9; 390 expected_output->f_array[1] = 9;
400 expected_output->f_array[2] = 8; 391 expected_output->f_array[2] = 8;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 449
459 MultiVersionStructV0Ptr output = 450 MultiVersionStructV0Ptr output =
460 SerializeAndDeserialize<MultiVersionStructV0Ptr>(input.Pass()); 451 SerializeAndDeserialize<MultiVersionStructV0Ptr>(input.Pass());
461 EXPECT_TRUE(output); 452 EXPECT_TRUE(output);
462 EXPECT_TRUE(output->Equals(*expected_output)); 453 EXPECT_TRUE(output->Equals(*expected_output));
463 } 454 }
464 } 455 }
465 456
466 } // namespace test 457 } // namespace test
467 } // namespace mojo 458 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698