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" |
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 EXPECT_EQ(nullptr, data); | 459 EXPECT_EQ(nullptr, data); |
460 | 460 |
461 NativeStructPtr output_native; | 461 NativeStructPtr output_native; |
462 mojo::internal::Deserialize<NativeStructDataView>(data, &output_native, | 462 mojo::internal::Deserialize<NativeStructDataView>(data, &output_native, |
463 nullptr); | 463 nullptr); |
464 EXPECT_TRUE(output_native.is_null()); | 464 EXPECT_TRUE(output_native.is_null()); |
465 } | 465 } |
466 | 466 |
467 { | 467 { |
468 NativeStructPtr native(NativeStruct::New()); | 468 NativeStructPtr native(NativeStruct::New()); |
469 native->data = Array<uint8_t>(2); | 469 native->data = std::vector<uint8_t>{'X', 'Y'}; |
470 native->data[0] = 'X'; | |
471 native->data[1] = 'Y'; | |
472 | 470 |
473 size_t size = mojo::internal::PrepareToSerialize<NativeStructDataView>( | 471 size_t size = mojo::internal::PrepareToSerialize<NativeStructDataView>( |
474 native, nullptr); | 472 native, nullptr); |
475 EXPECT_EQ(16u, size); | 473 EXPECT_EQ(16u, size); |
476 mojo::internal::FixedBufferForTesting buf(size); | 474 mojo::internal::FixedBufferForTesting buf(size); |
477 | 475 |
478 Data* data = nullptr; | 476 Data* data = nullptr; |
479 mojo::internal::Serialize<NativeStructDataView>(std::move(native), &buf, | 477 mojo::internal::Serialize<NativeStructDataView>(std::move(native), &buf, |
480 &data, nullptr); | 478 &data, nullptr); |
481 | 479 |
482 EXPECT_NE(nullptr, data); | 480 EXPECT_NE(nullptr, data); |
483 | 481 |
484 NativeStructPtr output_native; | 482 NativeStructPtr output_native; |
485 mojo::internal::Deserialize<NativeStructDataView>(data, &output_native, | 483 mojo::internal::Deserialize<NativeStructDataView>(data, &output_native, |
486 nullptr); | 484 nullptr); |
487 EXPECT_FALSE(output_native.is_null()); | 485 ASSERT_TRUE(output_native); |
488 EXPECT_FALSE(output_native->data.is_null()); | 486 ASSERT_FALSE(output_native->data->empty()); |
489 EXPECT_EQ(2u, output_native->data.size()); | 487 EXPECT_EQ(2u, output_native->data->size()); |
490 EXPECT_EQ('X', output_native->data[0]); | 488 EXPECT_EQ('X', (*output_native->data)[0]); |
491 EXPECT_EQ('Y', output_native->data[1]); | 489 EXPECT_EQ('Y', (*output_native->data)[1]); |
492 } | 490 } |
493 } | 491 } |
494 | 492 |
495 TEST_F(StructTest, Serialization_PublicAPI) { | 493 TEST_F(StructTest, Serialization_PublicAPI) { |
496 { | 494 { |
497 // A null struct pointer. | 495 // A null struct pointer. |
498 RectPtr null_struct; | 496 RectPtr null_struct; |
499 mojo::Array<uint8_t> data = Rect::Serialize(&null_struct); | 497 auto data = Rect::Serialize(&null_struct); |
500 EXPECT_TRUE(data.empty()); | 498 EXPECT_TRUE(data.empty()); |
501 | 499 |
502 // Initialize it to non-null. | 500 // Initialize it to non-null. |
503 RectPtr output(Rect::New()); | 501 RectPtr output(Rect::New()); |
504 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); | 502 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); |
505 EXPECT_TRUE(output.is_null()); | 503 EXPECT_TRUE(output.is_null()); |
506 } | 504 } |
507 | 505 |
508 { | 506 { |
509 // A struct with no fields. | 507 // A struct with no fields. |
510 EmptyStructPtr empty_struct(EmptyStruct::New()); | 508 EmptyStructPtr empty_struct(EmptyStruct::New()); |
511 mojo::Array<uint8_t> data = EmptyStruct::Serialize(&empty_struct); | 509 auto data = EmptyStruct::Serialize(&empty_struct); |
512 EXPECT_FALSE(data.empty()); | 510 EXPECT_FALSE(data.empty()); |
513 | 511 |
514 EmptyStructPtr output; | 512 EmptyStructPtr output; |
515 ASSERT_TRUE(EmptyStruct::Deserialize(std::move(data), &output)); | 513 ASSERT_TRUE(EmptyStruct::Deserialize(std::move(data), &output)); |
516 EXPECT_FALSE(output.is_null()); | 514 EXPECT_FALSE(output.is_null()); |
517 } | 515 } |
518 | 516 |
519 { | 517 { |
520 // A simple struct. | 518 // A simple struct. |
521 RectPtr rect = MakeRect(); | 519 RectPtr rect = MakeRect(); |
522 RectPtr cloned_rect = rect.Clone(); | 520 RectPtr cloned_rect = rect.Clone(); |
523 mojo::Array<uint8_t> data = Rect::Serialize(&rect); | 521 auto data = Rect::Serialize(&rect); |
524 | 522 |
525 RectPtr output; | 523 RectPtr output; |
526 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); | 524 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); |
527 EXPECT_TRUE(output.Equals(cloned_rect)); | 525 EXPECT_TRUE(output.Equals(cloned_rect)); |
528 } | 526 } |
529 | 527 |
530 { | 528 { |
531 // A struct containing other objects. | 529 // A struct containing other objects. |
532 NamedRegionPtr region(NamedRegion::New()); | 530 NamedRegionPtr region(NamedRegion::New()); |
533 region->name.emplace("region"); | 531 region->name.emplace("region"); |
534 region->rects.emplace(3); | 532 region->rects.emplace(3); |
535 for (size_t i = 0; i < region->rects->size(); ++i) | 533 for (size_t i = 0; i < region->rects->size(); ++i) |
536 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); | 534 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); |
537 | 535 |
538 NamedRegionPtr cloned_region = region.Clone(); | 536 NamedRegionPtr cloned_region = region.Clone(); |
539 mojo::Array<uint8_t> data = NamedRegion::Serialize(®ion); | 537 auto data = NamedRegion::Serialize(®ion); |
540 | 538 |
541 // Make sure that the serialized result gets pointers encoded properly. | 539 // Make sure that the serialized result gets pointers encoded properly. |
542 mojo::Array<uint8_t> cloned_data = data.Clone(); | 540 auto cloned_data = data; |
543 NamedRegionPtr output; | 541 NamedRegionPtr output; |
544 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output)); | 542 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output)); |
545 EXPECT_TRUE(output.Equals(cloned_region)); | 543 EXPECT_TRUE(output.Equals(cloned_region)); |
546 } | 544 } |
547 | 545 |
548 { | 546 { |
549 // Deserialization failure. | 547 // Deserialization failure. |
550 RectPtr rect = MakeRect(); | 548 RectPtr rect = MakeRect(); |
551 mojo::Array<uint8_t> data = Rect::Serialize(&rect); | 549 auto data = Rect::Serialize(&rect); |
552 | 550 |
553 NamedRegionPtr output; | 551 NamedRegionPtr output; |
554 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output)); | 552 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output)); |
555 } | 553 } |
556 } | 554 } |
557 | 555 |
558 } // namespace test | 556 } // namespace test |
559 } // namespace mojo | 557 } // namespace mojo |
OLD | NEW |