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_export2.mojom.h" |
12 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" | 13 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
14 | 15 |
15 namespace mojo { | 16 namespace mojo { |
16 namespace test { | 17 namespace test { |
17 namespace { | 18 namespace { |
18 | 19 |
19 RectPtr MakeRect(int32_t factor = 1) { | 20 RectPtr MakeRect(int32_t factor = 1) { |
20 return Rect::New(1 * factor, 2 * factor, 10 * factor, 20 * factor); | 21 return Rect::New(1 * factor, 2 * factor, 10 * factor, 20 * factor); |
21 } | 22 } |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 | 429 |
429 TEST_F(StructTest, Serialization_PublicAPI) { | 430 TEST_F(StructTest, Serialization_PublicAPI) { |
430 { | 431 { |
431 // A null struct pointer. | 432 // A null struct pointer. |
432 RectPtr null_struct; | 433 RectPtr null_struct; |
433 auto data = Rect::Serialize(&null_struct); | 434 auto data = Rect::Serialize(&null_struct); |
434 EXPECT_TRUE(data.empty()); | 435 EXPECT_TRUE(data.empty()); |
435 | 436 |
436 // Initialize it to non-null. | 437 // Initialize it to non-null. |
437 RectPtr output(Rect::New()); | 438 RectPtr output(Rect::New()); |
438 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); | 439 ASSERT_TRUE(Rect::Deserialize(data, &output)); |
439 EXPECT_TRUE(output.is_null()); | 440 EXPECT_TRUE(output.is_null()); |
440 } | 441 } |
441 | 442 |
442 { | 443 { |
443 // A struct with no fields. | 444 // A struct with no fields. |
444 EmptyStructPtr empty_struct(EmptyStruct::New()); | 445 EmptyStructPtr empty_struct(EmptyStruct::New()); |
445 auto data = EmptyStruct::Serialize(&empty_struct); | 446 auto data = EmptyStruct::Serialize(&empty_struct); |
446 EXPECT_FALSE(data.empty()); | 447 EXPECT_FALSE(data.empty()); |
447 | 448 |
448 EmptyStructPtr output; | 449 EmptyStructPtr output; |
449 ASSERT_TRUE(EmptyStruct::Deserialize(std::move(data), &output)); | 450 ASSERT_TRUE(EmptyStruct::Deserialize(data, &output)); |
450 EXPECT_FALSE(output.is_null()); | 451 EXPECT_FALSE(output.is_null()); |
451 } | 452 } |
452 | 453 |
453 { | 454 { |
454 // A simple struct. | 455 // A simple struct. |
455 RectPtr rect = MakeRect(); | 456 RectPtr rect = MakeRect(); |
456 RectPtr cloned_rect = rect.Clone(); | 457 RectPtr cloned_rect = rect.Clone(); |
457 auto data = Rect::Serialize(&rect); | 458 auto data = Rect::Serialize(&rect); |
458 | 459 |
459 RectPtr output; | 460 RectPtr output; |
460 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); | 461 ASSERT_TRUE(Rect::Deserialize(data, &output)); |
461 EXPECT_TRUE(output.Equals(cloned_rect)); | 462 EXPECT_TRUE(output.Equals(cloned_rect)); |
462 } | 463 } |
463 | 464 |
464 { | 465 { |
465 // A struct containing other objects. | 466 // A struct containing other objects. |
466 std::vector<RectPtr> rects; | 467 std::vector<RectPtr> rects; |
467 for (size_t i = 0; i < 3; ++i) | 468 for (size_t i = 0; i < 3; ++i) |
468 rects.push_back(MakeRect(static_cast<int32_t>(i) + 1)); | 469 rects.push_back(MakeRect(static_cast<int32_t>(i) + 1)); |
469 NamedRegionPtr region( | 470 NamedRegionPtr region( |
470 NamedRegion::New(std::string("region"), std::move(rects))); | 471 NamedRegion::New(std::string("region"), std::move(rects))); |
471 | 472 |
472 NamedRegionPtr cloned_region = region.Clone(); | 473 NamedRegionPtr cloned_region = region.Clone(); |
473 auto data = NamedRegion::Serialize(®ion); | 474 auto data = NamedRegion::Serialize(®ion); |
474 | 475 |
475 // Make sure that the serialized result gets pointers encoded properly. | 476 // Make sure that the serialized result gets pointers encoded properly. |
476 auto cloned_data = data; | 477 auto cloned_data = data; |
477 NamedRegionPtr output; | 478 NamedRegionPtr output; |
478 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output)); | 479 ASSERT_TRUE(NamedRegion::Deserialize(cloned_data, &output)); |
479 EXPECT_TRUE(output.Equals(cloned_region)); | 480 EXPECT_TRUE(output.Equals(cloned_region)); |
480 } | 481 } |
481 | 482 |
482 { | 483 { |
483 // Deserialization failure. | 484 // Deserialization failure. |
484 RectPtr rect = MakeRect(); | 485 RectPtr rect = MakeRect(); |
485 auto data = Rect::Serialize(&rect); | 486 auto data = Rect::Serialize(&rect); |
486 | 487 |
487 NamedRegionPtr output; | 488 NamedRegionPtr output; |
488 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output)); | 489 EXPECT_FALSE(NamedRegion::Deserialize(data, &output)); |
| 490 } |
| 491 |
| 492 { |
| 493 // A struct from another component. |
| 494 auto pair = test_export2::StringPair::New("hello", "world"); |
| 495 auto data = test_export2::StringPair::Serialize(&pair); |
| 496 |
| 497 test_export2::StringPairPtr output; |
| 498 ASSERT_TRUE(test_export2::StringPair::Deserialize(data, &output)); |
| 499 EXPECT_TRUE(output.Equals(pair)); |
489 } | 500 } |
490 } | 501 } |
491 | 502 |
492 TEST_F(StructTest, VersionedStructConstructor) { | 503 TEST_F(StructTest, VersionedStructConstructor) { |
493 auto reordered = ReorderedStruct::New(123, 456, 789); | 504 auto reordered = ReorderedStruct::New(123, 456, 789); |
494 EXPECT_EQ(123, reordered->a); | 505 EXPECT_EQ(123, reordered->a); |
495 EXPECT_EQ(456, reordered->b); | 506 EXPECT_EQ(456, reordered->b); |
496 EXPECT_EQ(789, reordered->c); | 507 EXPECT_EQ(789, reordered->c); |
497 | 508 |
498 reordered = ReorderedStruct::New(123, 456); | 509 reordered = ReorderedStruct::New(123, 456); |
499 EXPECT_EQ(123, reordered->a); | 510 EXPECT_EQ(123, reordered->a); |
500 EXPECT_EQ(6, reordered->b); | 511 EXPECT_EQ(6, reordered->b); |
501 EXPECT_EQ(456, reordered->c); | 512 EXPECT_EQ(456, reordered->c); |
502 | 513 |
503 reordered = ReorderedStruct::New(123); | 514 reordered = ReorderedStruct::New(123); |
504 EXPECT_EQ(3, reordered->a); | 515 EXPECT_EQ(3, reordered->a); |
505 EXPECT_EQ(6, reordered->b); | 516 EXPECT_EQ(6, reordered->b); |
506 EXPECT_EQ(123, reordered->c); | 517 EXPECT_EQ(123, reordered->c); |
507 | 518 |
508 reordered = ReorderedStruct::New(); | 519 reordered = ReorderedStruct::New(); |
509 EXPECT_EQ(3, reordered->a); | 520 EXPECT_EQ(3, reordered->a); |
510 EXPECT_EQ(6, reordered->b); | 521 EXPECT_EQ(6, reordered->b); |
511 EXPECT_EQ(1, reordered->c); | 522 EXPECT_EQ(1, reordered->c); |
512 } | 523 } |
513 | 524 |
514 } // namespace test | 525 } // namespace test |
515 } // namespace mojo | 526 } // namespace mojo |
OLD | NEW |