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 |