| Index: mojo/public/cpp/bindings/tests/struct_unittest.cc
|
| diff --git a/mojo/public/cpp/bindings/tests/struct_unittest.cc b/mojo/public/cpp/bindings/tests/struct_unittest.cc
|
| index d5cc8163871a1376f82325c46206024d3c139e56..cfd9ca46e9abd47349aea9ef16f05cacd1ce2cc0 100644
|
| --- a/mojo/public/cpp/bindings/tests/struct_unittest.cc
|
| +++ b/mojo/public/cpp/bindings/tests/struct_unittest.cc
|
| @@ -490,5 +490,68 @@ TEST_F(StructTest, Serialization_NativeStruct) {
|
| }
|
| }
|
|
|
| +TEST_F(StructTest, Serialization_PublicAPI) {
|
| + {
|
| + // A null struct pointer.
|
| + RectPtr null_struct;
|
| + mojo::Array<uint8_t> data = Rect::Serialize(&null_struct);
|
| + EXPECT_TRUE(data.empty());
|
| +
|
| + // Initialize it to non-null.
|
| + RectPtr output(Rect::New());
|
| + ASSERT_TRUE(Rect::Deserialize(std::move(data), &output));
|
| + EXPECT_TRUE(output.is_null());
|
| + }
|
| +
|
| + {
|
| + // A struct with no fields.
|
| + EmptyStructPtr empty_struct(EmptyStruct::New());
|
| + mojo::Array<uint8_t> data = EmptyStruct::Serialize(&empty_struct);
|
| + EXPECT_FALSE(data.empty());
|
| +
|
| + EmptyStructPtr output;
|
| + ASSERT_TRUE(EmptyStruct::Deserialize(std::move(data), &output));
|
| + EXPECT_FALSE(output.is_null());
|
| + }
|
| +
|
| + {
|
| + // A simple struct.
|
| + RectPtr rect = MakeRect();
|
| + RectPtr cloned_rect = rect.Clone();
|
| + mojo::Array<uint8_t> data = Rect::Serialize(&rect);
|
| +
|
| + RectPtr output;
|
| + ASSERT_TRUE(Rect::Deserialize(std::move(data), &output));
|
| + EXPECT_TRUE(output.Equals(cloned_rect));
|
| + }
|
| +
|
| + {
|
| + // A struct containing other objects.
|
| + NamedRegionPtr region(NamedRegion::New());
|
| + region->name = "region";
|
| + region->rects = Array<RectPtr>::New(4);
|
| + for (size_t i = 0; i < region->rects.size(); ++i)
|
| + region->rects[i] = MakeRect(static_cast<int32_t>(i) + 1);
|
| +
|
| + NamedRegionPtr cloned_region = region.Clone();
|
| + mojo::Array<uint8_t> data = NamedRegion::Serialize(®ion);
|
| +
|
| + // Make sure that the serialized result gets pointers encoded properly.
|
| + mojo::Array<uint8_t> cloned_data = data.Clone();
|
| + NamedRegionPtr output;
|
| + ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output));
|
| + EXPECT_TRUE(output.Equals(cloned_region));
|
| + }
|
| +
|
| + {
|
| + // Deserialization failure.
|
| + RectPtr rect = MakeRect();
|
| + mojo::Array<uint8_t> data = Rect::Serialize(&rect);
|
| +
|
| + NamedRegionPtr output;
|
| + EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output));
|
| + }
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace mojo
|
|
|