| 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 |