Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(368)

Unified Diff: mojo/public/cpp/bindings/tests/struct_unittest.cc

Issue 2076313002: Mojo C++ bindings: expose serialization public API for mojo structs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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(&region);
+
+ // 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
« no previous file with comments | « mojo/public/cpp/bindings/tests/struct_traits_unittest.cc ('k') | mojo/public/cpp/bindings/tests/wtf_types_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698