OLD | NEW |
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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 #include <string.h> | 7 #include <string.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" | 10 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" |
11 #include "mojo/public/cpp/system/message_pipe.h" | 11 #include "mojo/public/cpp/system/message_pipe.h" |
12 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" | 12 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 namespace mojo { | 15 namespace mojo { |
16 namespace test { | 16 namespace test { |
17 namespace { | 17 namespace { |
18 | 18 |
19 RectPtr MakeRect(int32_t factor = 1) { | 19 RectPtr MakeRect(int32_t factor = 1) { |
20 RectPtr rect(Rect::New()); | 20 return Rect::New(1 * factor, 2 * factor, 10 * factor, 20 * factor); |
21 rect->x = 1 * factor; | |
22 rect->y = 2 * factor; | |
23 rect->width = 10 * factor; | |
24 rect->height = 20 * factor; | |
25 return rect; | |
26 } | 21 } |
27 | 22 |
28 void CheckRect(const Rect& rect, int32_t factor = 1) { | 23 void CheckRect(const Rect& rect, int32_t factor = 1) { |
29 EXPECT_EQ(1 * factor, rect.x); | 24 EXPECT_EQ(1 * factor, rect.x); |
30 EXPECT_EQ(2 * factor, rect.y); | 25 EXPECT_EQ(2 * factor, rect.y); |
31 EXPECT_EQ(10 * factor, rect.width); | 26 EXPECT_EQ(10 * factor, rect.width); |
32 EXPECT_EQ(20 * factor, rect.height); | 27 EXPECT_EQ(20 * factor, rect.height); |
33 } | 28 } |
34 | 29 |
35 MultiVersionStructPtr MakeMultiVersionStruct() { | 30 MultiVersionStructPtr MakeMultiVersionStruct() { |
36 MultiVersionStructPtr output(MultiVersionStruct::New()); | |
37 output->f_int32 = 123; | |
38 output->f_rect = MakeRect(5); | |
39 output->f_string.emplace("hello"); | |
40 output->f_array.emplace(3); | |
41 (*output->f_array)[0] = 10; | |
42 (*output->f_array)[1] = 9; | |
43 (*output->f_array)[2] = 8; | |
44 MessagePipe pipe; | 31 MessagePipe pipe; |
45 output->f_message_pipe = std::move(pipe.handle0); | 32 return MultiVersionStruct::New(123, MakeRect(5), std::string("hello"), |
46 output->f_int16 = 42; | 33 std::vector<int8_t>{10, 9, 8}, |
47 | 34 std::move(pipe.handle0), false, 42); |
48 return output; | |
49 } | 35 } |
50 | 36 |
51 template <typename U, typename T> | 37 template <typename U, typename T> |
52 U SerializeAndDeserialize(T input) { | 38 U SerializeAndDeserialize(T input) { |
53 using InputMojomType = typename T::Struct::DataView; | 39 using InputMojomType = typename T::Struct::DataView; |
54 using OutputMojomType = typename U::Struct::DataView; | 40 using OutputMojomType = typename U::Struct::DataView; |
55 | 41 |
56 using InputDataType = | 42 using InputDataType = |
57 typename mojo::internal::MojomTypeTraits<InputMojomType>::Data*; | 43 typename mojo::internal::MojomTypeTraits<InputMojomType>::Data*; |
58 using OutputDataType = | 44 using OutputDataType = |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 EXPECT_FALSE(pair.is_null()); | 145 EXPECT_FALSE(pair.is_null()); |
160 EXPECT_TRUE(pair->first.is_null()); | 146 EXPECT_TRUE(pair->first.is_null()); |
161 EXPECT_TRUE(pair->first.is_null()); | 147 EXPECT_TRUE(pair->first.is_null()); |
162 | 148 |
163 pair = nullptr; | 149 pair = nullptr; |
164 EXPECT_TRUE(pair.is_null()); | 150 EXPECT_TRUE(pair.is_null()); |
165 } | 151 } |
166 | 152 |
167 // Serialization test of a struct with struct pointers. | 153 // Serialization test of a struct with struct pointers. |
168 TEST_F(StructTest, Serialization_StructPointers) { | 154 TEST_F(StructTest, Serialization_StructPointers) { |
169 RectPairPtr pair(RectPair::New()); | 155 RectPairPtr pair(RectPair::New(MakeRect(), MakeRect())); |
170 pair->first = MakeRect(); | |
171 pair->second = MakeRect(); | |
172 | 156 |
173 size_t size = | 157 size_t size = |
174 mojo::internal::PrepareToSerialize<RectPairDataView>(pair, nullptr); | 158 mojo::internal::PrepareToSerialize<RectPairDataView>(pair, nullptr); |
175 EXPECT_EQ(8U + 16U + 2 * (8U + 16U), size); | 159 EXPECT_EQ(8U + 16U + 2 * (8U + 16U), size); |
176 | 160 |
177 mojo::internal::FixedBufferForTesting buf(size); | 161 mojo::internal::FixedBufferForTesting buf(size); |
178 internal::RectPair_Data* data; | 162 internal::RectPair_Data* data; |
179 mojo::internal::Serialize<RectPairDataView>(pair, &buf, &data, nullptr); | 163 mojo::internal::Serialize<RectPairDataView>(pair, &buf, &data, nullptr); |
180 | 164 |
181 RectPairPtr pair2; | 165 RectPairPtr pair2; |
182 mojo::internal::Deserialize<RectPairDataView>(data, &pair2, nullptr); | 166 mojo::internal::Deserialize<RectPairDataView>(data, &pair2, nullptr); |
183 | 167 |
184 CheckRect(*pair2->first); | 168 CheckRect(*pair2->first); |
185 CheckRect(*pair2->second); | 169 CheckRect(*pair2->second); |
186 } | 170 } |
187 | 171 |
188 // Serialization test of a struct with an array member. | 172 // Serialization test of a struct with an array member. |
189 TEST_F(StructTest, Serialization_ArrayPointers) { | 173 TEST_F(StructTest, Serialization_ArrayPointers) { |
190 NamedRegionPtr region(NamedRegion::New()); | 174 std::vector<RectPtr> rects; |
191 region->name.emplace("region"); | 175 for (size_t i = 0; i < 4; ++i) |
192 region->rects.emplace(4); | 176 rects.push_back(MakeRect(static_cast<int32_t>(i) + 1)); |
193 for (size_t i = 0; i < region->rects->size(); ++i) | 177 |
194 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); | 178 NamedRegionPtr region( |
| 179 NamedRegion::New(std::string("region"), std::move(rects))); |
195 | 180 |
196 size_t size = | 181 size_t size = |
197 mojo::internal::PrepareToSerialize<NamedRegionDataView>(region, nullptr); | 182 mojo::internal::PrepareToSerialize<NamedRegionDataView>(region, nullptr); |
198 EXPECT_EQ(8U + // header | 183 EXPECT_EQ(8U + // header |
199 8U + // name pointer | 184 8U + // name pointer |
200 8U + // rects pointer | 185 8U + // rects pointer |
201 8U + // name header | 186 8U + // name header |
202 8U + // name payload (rounded up) | 187 8U + // name payload (rounded up) |
203 8U + // rects header | 188 8U + // rects header |
204 4 * 8U + // rects payload (four pointers) | 189 4 * 8U + // rects payload (four pointers) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 NamedRegionPtr region2; | 225 NamedRegionPtr region2; |
241 mojo::internal::Deserialize<NamedRegionDataView>(data, ®ion2, nullptr); | 226 mojo::internal::Deserialize<NamedRegionDataView>(data, ®ion2, nullptr); |
242 | 227 |
243 EXPECT_FALSE(region2->name); | 228 EXPECT_FALSE(region2->name); |
244 EXPECT_FALSE(region2->rects); | 229 EXPECT_FALSE(region2->rects); |
245 } | 230 } |
246 | 231 |
247 // Tests deserializing structs as a newer version. | 232 // Tests deserializing structs as a newer version. |
248 TEST_F(StructTest, Versioning_OldToNew) { | 233 TEST_F(StructTest, Versioning_OldToNew) { |
249 { | 234 { |
250 MultiVersionStructV0Ptr input(MultiVersionStructV0::New()); | 235 MultiVersionStructV0Ptr input(MultiVersionStructV0::New(123)); |
251 input->f_int32 = 123; | 236 MultiVersionStructPtr expected_output(MultiVersionStruct::New(123)); |
252 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | |
253 expected_output->f_int32 = 123; | |
254 | 237 |
255 MultiVersionStructPtr output = | 238 MultiVersionStructPtr output = |
256 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 239 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
257 EXPECT_TRUE(output); | 240 EXPECT_TRUE(output); |
258 EXPECT_TRUE(output->Equals(*expected_output)); | 241 EXPECT_TRUE(output->Equals(*expected_output)); |
259 } | 242 } |
260 | 243 |
261 { | 244 { |
262 MultiVersionStructV1Ptr input(MultiVersionStructV1::New()); | 245 MultiVersionStructV1Ptr input(MultiVersionStructV1::New(123, MakeRect(5))); |
263 input->f_int32 = 123; | 246 MultiVersionStructPtr expected_output( |
264 input->f_rect = MakeRect(5); | 247 MultiVersionStruct::New(123, MakeRect(5))); |
265 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | |
266 expected_output->f_int32 = 123; | |
267 expected_output->f_rect = MakeRect(5); | |
268 | 248 |
269 MultiVersionStructPtr output = | 249 MultiVersionStructPtr output = |
270 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 250 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
271 EXPECT_TRUE(output); | 251 EXPECT_TRUE(output); |
272 EXPECT_TRUE(output->Equals(*expected_output)); | 252 EXPECT_TRUE(output->Equals(*expected_output)); |
273 } | 253 } |
274 | 254 |
275 { | 255 { |
276 MultiVersionStructV3Ptr input(MultiVersionStructV3::New()); | 256 MultiVersionStructV3Ptr input( |
277 input->f_int32 = 123; | 257 MultiVersionStructV3::New(123, MakeRect(5), std::string("hello"))); |
278 input->f_rect = MakeRect(5); | 258 MultiVersionStructPtr expected_output( |
279 input->f_string.emplace("hello"); | 259 MultiVersionStruct::New(123, MakeRect(5), std::string("hello"))); |
280 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | |
281 expected_output->f_int32 = 123; | |
282 expected_output->f_rect = MakeRect(5); | |
283 expected_output->f_string.emplace("hello"); | |
284 | 260 |
285 MultiVersionStructPtr output = | 261 MultiVersionStructPtr output = |
286 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 262 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
287 EXPECT_TRUE(output); | 263 EXPECT_TRUE(output); |
288 EXPECT_TRUE(output->Equals(*expected_output)); | 264 EXPECT_TRUE(output->Equals(*expected_output)); |
289 } | 265 } |
290 | 266 |
291 { | 267 { |
292 MultiVersionStructV5Ptr input(MultiVersionStructV5::New()); | 268 MultiVersionStructV5Ptr input(MultiVersionStructV5::New( |
293 input->f_int32 = 123; | 269 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
294 input->f_rect = MakeRect(5); | 270 MultiVersionStructPtr expected_output(MultiVersionStruct::New( |
295 input->f_string.emplace("hello"); | 271 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
296 input->f_array.emplace(3); | |
297 (*input->f_array)[0] = 10; | |
298 (*input->f_array)[1] = 9; | |
299 (*input->f_array)[2] = 8; | |
300 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | |
301 expected_output->f_int32 = 123; | |
302 expected_output->f_rect = MakeRect(5); | |
303 expected_output->f_string.emplace("hello"); | |
304 expected_output->f_array.emplace(3); | |
305 (*expected_output->f_array)[0] = 10; | |
306 (*expected_output->f_array)[1] = 9; | |
307 (*expected_output->f_array)[2] = 8; | |
308 | 272 |
309 MultiVersionStructPtr output = | 273 MultiVersionStructPtr output = |
310 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 274 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
311 EXPECT_TRUE(output); | 275 EXPECT_TRUE(output); |
312 EXPECT_TRUE(output->Equals(*expected_output)); | 276 EXPECT_TRUE(output->Equals(*expected_output)); |
313 } | 277 } |
314 | 278 |
315 { | 279 { |
316 MultiVersionStructV7Ptr input(MultiVersionStructV7::New()); | |
317 input->f_int32 = 123; | |
318 input->f_rect = MakeRect(5); | |
319 input->f_string.emplace("hello"); | |
320 input->f_array.emplace(3); | |
321 (*input->f_array)[0] = 10; | |
322 (*input->f_array)[1] = 9; | |
323 (*input->f_array)[2] = 8; | |
324 MessagePipe pipe; | 280 MessagePipe pipe; |
325 input->f_message_pipe = std::move(pipe.handle0); | 281 MultiVersionStructV7Ptr input(MultiVersionStructV7::New( |
| 282 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8}, |
| 283 std::move(pipe.handle0), false)); |
326 | 284 |
327 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); | 285 MultiVersionStructPtr expected_output(MultiVersionStruct::New( |
328 expected_output->f_int32 = 123; | 286 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
329 expected_output->f_rect = MakeRect(5); | |
330 expected_output->f_string.emplace("hello"); | |
331 expected_output->f_array.emplace(3); | |
332 (*expected_output->f_array)[0] = 10; | |
333 (*expected_output->f_array)[1] = 9; | |
334 (*expected_output->f_array)[2] = 8; | |
335 // Save the raw handle value separately so that we can compare later. | 287 // Save the raw handle value separately so that we can compare later. |
336 MojoHandle expected_handle = input->f_message_pipe.get().value(); | 288 MojoHandle expected_handle = input->f_message_pipe.get().value(); |
337 | 289 |
338 MultiVersionStructPtr output = | 290 MultiVersionStructPtr output = |
339 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); | 291 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
340 EXPECT_TRUE(output); | 292 EXPECT_TRUE(output); |
341 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); | 293 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); |
342 output->f_message_pipe.reset(); | 294 output->f_message_pipe.reset(); |
343 EXPECT_TRUE(output->Equals(*expected_output)); | 295 EXPECT_TRUE(output->Equals(*expected_output)); |
344 } | 296 } |
345 } | 297 } |
346 | 298 |
347 // Tests deserializing structs as an older version. | 299 // Tests deserializing structs as an older version. |
348 TEST_F(StructTest, Versioning_NewToOld) { | 300 TEST_F(StructTest, Versioning_NewToOld) { |
349 { | 301 { |
350 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 302 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
351 MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New()); | 303 MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New( |
352 expected_output->f_int32 = 123; | 304 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
353 expected_output->f_rect = MakeRect(5); | |
354 expected_output->f_string.emplace("hello"); | |
355 expected_output->f_array.emplace(3); | |
356 (*expected_output->f_array)[0] = 10; | |
357 (*expected_output->f_array)[1] = 9; | |
358 (*expected_output->f_array)[2] = 8; | |
359 // Save the raw handle value separately so that we can compare later. | 305 // Save the raw handle value separately so that we can compare later. |
360 MojoHandle expected_handle = input->f_message_pipe.get().value(); | 306 MojoHandle expected_handle = input->f_message_pipe.get().value(); |
361 | 307 |
362 MultiVersionStructV7Ptr output = | 308 MultiVersionStructV7Ptr output = |
363 SerializeAndDeserialize<MultiVersionStructV7Ptr>(std::move(input)); | 309 SerializeAndDeserialize<MultiVersionStructV7Ptr>(std::move(input)); |
364 EXPECT_TRUE(output); | 310 EXPECT_TRUE(output); |
365 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); | 311 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); |
366 output->f_message_pipe.reset(); | 312 output->f_message_pipe.reset(); |
367 EXPECT_TRUE(output->Equals(*expected_output)); | 313 EXPECT_TRUE(output->Equals(*expected_output)); |
368 } | 314 } |
369 | 315 |
370 { | 316 { |
371 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 317 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
372 MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New()); | 318 MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New( |
373 expected_output->f_int32 = 123; | 319 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
374 expected_output->f_rect = MakeRect(5); | |
375 expected_output->f_string.emplace("hello"); | |
376 expected_output->f_array.emplace(3); | |
377 (*expected_output->f_array)[0] = 10; | |
378 (*expected_output->f_array)[1] = 9; | |
379 (*expected_output->f_array)[2] = 8; | |
380 | 320 |
381 MultiVersionStructV5Ptr output = | 321 MultiVersionStructV5Ptr output = |
382 SerializeAndDeserialize<MultiVersionStructV5Ptr>(std::move(input)); | 322 SerializeAndDeserialize<MultiVersionStructV5Ptr>(std::move(input)); |
383 EXPECT_TRUE(output); | 323 EXPECT_TRUE(output); |
384 EXPECT_TRUE(output->Equals(*expected_output)); | 324 EXPECT_TRUE(output->Equals(*expected_output)); |
385 } | 325 } |
386 | 326 |
387 { | 327 { |
388 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 328 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
389 MultiVersionStructV3Ptr expected_output(MultiVersionStructV3::New()); | 329 MultiVersionStructV3Ptr expected_output( |
390 expected_output->f_int32 = 123; | 330 MultiVersionStructV3::New(123, MakeRect(5), std::string("hello"))); |
391 expected_output->f_rect = MakeRect(5); | |
392 expected_output->f_string.emplace("hello"); | |
393 | 331 |
394 MultiVersionStructV3Ptr output = | 332 MultiVersionStructV3Ptr output = |
395 SerializeAndDeserialize<MultiVersionStructV3Ptr>(std::move(input)); | 333 SerializeAndDeserialize<MultiVersionStructV3Ptr>(std::move(input)); |
396 EXPECT_TRUE(output); | 334 EXPECT_TRUE(output); |
397 EXPECT_TRUE(output->Equals(*expected_output)); | 335 EXPECT_TRUE(output->Equals(*expected_output)); |
398 } | 336 } |
399 | 337 |
400 { | 338 { |
401 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 339 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
402 MultiVersionStructV1Ptr expected_output(MultiVersionStructV1::New()); | 340 MultiVersionStructV1Ptr expected_output( |
403 expected_output->f_int32 = 123; | 341 MultiVersionStructV1::New(123, MakeRect(5))); |
404 expected_output->f_rect = MakeRect(5); | |
405 | 342 |
406 MultiVersionStructV1Ptr output = | 343 MultiVersionStructV1Ptr output = |
407 SerializeAndDeserialize<MultiVersionStructV1Ptr>(std::move(input)); | 344 SerializeAndDeserialize<MultiVersionStructV1Ptr>(std::move(input)); |
408 EXPECT_TRUE(output); | 345 EXPECT_TRUE(output); |
409 EXPECT_TRUE(output->Equals(*expected_output)); | 346 EXPECT_TRUE(output->Equals(*expected_output)); |
410 } | 347 } |
411 | 348 |
412 { | 349 { |
413 MultiVersionStructPtr input = MakeMultiVersionStruct(); | 350 MultiVersionStructPtr input = MakeMultiVersionStruct(); |
414 MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New()); | 351 MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New(123)); |
415 expected_output->f_int32 = 123; | |
416 | 352 |
417 MultiVersionStructV0Ptr output = | 353 MultiVersionStructV0Ptr output = |
418 SerializeAndDeserialize<MultiVersionStructV0Ptr>(std::move(input)); | 354 SerializeAndDeserialize<MultiVersionStructV0Ptr>(std::move(input)); |
419 EXPECT_TRUE(output); | 355 EXPECT_TRUE(output); |
420 EXPECT_TRUE(output->Equals(*expected_output)); | 356 EXPECT_TRUE(output->Equals(*expected_output)); |
421 } | 357 } |
422 } | 358 } |
423 | 359 |
424 // Serialization test for native struct. | 360 // Serialization test for native struct. |
425 TEST_F(StructTest, Serialization_NativeStruct) { | 361 TEST_F(StructTest, Serialization_NativeStruct) { |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 RectPtr cloned_rect = rect.Clone(); | 456 RectPtr cloned_rect = rect.Clone(); |
521 auto data = Rect::Serialize(&rect); | 457 auto data = Rect::Serialize(&rect); |
522 | 458 |
523 RectPtr output; | 459 RectPtr output; |
524 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); | 460 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); |
525 EXPECT_TRUE(output.Equals(cloned_rect)); | 461 EXPECT_TRUE(output.Equals(cloned_rect)); |
526 } | 462 } |
527 | 463 |
528 { | 464 { |
529 // A struct containing other objects. | 465 // A struct containing other objects. |
530 NamedRegionPtr region(NamedRegion::New()); | 466 std::vector<RectPtr> rects; |
531 region->name.emplace("region"); | 467 for (size_t i = 0; i < 3; ++i) |
532 region->rects.emplace(3); | 468 rects.push_back(MakeRect(static_cast<int32_t>(i) + 1)); |
533 for (size_t i = 0; i < region->rects->size(); ++i) | 469 NamedRegionPtr region( |
534 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); | 470 NamedRegion::New(std::string("region"), std::move(rects))); |
535 | 471 |
536 NamedRegionPtr cloned_region = region.Clone(); | 472 NamedRegionPtr cloned_region = region.Clone(); |
537 auto data = NamedRegion::Serialize(®ion); | 473 auto data = NamedRegion::Serialize(®ion); |
538 | 474 |
539 // Make sure that the serialized result gets pointers encoded properly. | 475 // Make sure that the serialized result gets pointers encoded properly. |
540 auto cloned_data = data; | 476 auto cloned_data = data; |
541 NamedRegionPtr output; | 477 NamedRegionPtr output; |
542 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output)); | 478 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output)); |
543 EXPECT_TRUE(output.Equals(cloned_region)); | 479 EXPECT_TRUE(output.Equals(cloned_region)); |
544 } | 480 } |
545 | 481 |
546 { | 482 { |
547 // Deserialization failure. | 483 // Deserialization failure. |
548 RectPtr rect = MakeRect(); | 484 RectPtr rect = MakeRect(); |
549 auto data = Rect::Serialize(&rect); | 485 auto data = Rect::Serialize(&rect); |
550 | 486 |
551 NamedRegionPtr output; | 487 NamedRegionPtr output; |
552 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output)); | 488 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output)); |
553 } | 489 } |
554 } | 490 } |
555 | 491 |
| 492 TEST_F(StructTest, VersionedStructConstructor) { |
| 493 auto reordered = ReorderedStruct::New(123, 456, 789); |
| 494 EXPECT_EQ(123, reordered->a); |
| 495 EXPECT_EQ(456, reordered->b); |
| 496 EXPECT_EQ(789, reordered->c); |
| 497 |
| 498 reordered = ReorderedStruct::New(123, 456); |
| 499 EXPECT_EQ(123, reordered->a); |
| 500 EXPECT_EQ(6, reordered->b); |
| 501 EXPECT_EQ(456, reordered->c); |
| 502 |
| 503 reordered = ReorderedStruct::New(123); |
| 504 EXPECT_EQ(3, reordered->a); |
| 505 EXPECT_EQ(6, reordered->b); |
| 506 EXPECT_EQ(123, reordered->c); |
| 507 |
| 508 reordered = ReorderedStruct::New(); |
| 509 EXPECT_EQ(3, reordered->a); |
| 510 EXPECT_EQ(6, reordered->b); |
| 511 EXPECT_EQ(1, reordered->c); |
| 512 } |
| 513 |
556 } // namespace test | 514 } // namespace test |
557 } // namespace mojo | 515 } // namespace mojo |
OLD | NEW |