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 dcca35f34a8b8b345f113fdd1dcb9f44c22e3570..13ba507e153ed1792f6bf2dae90ff7e7995c9ea2 100644 |
--- a/mojo/public/cpp/bindings/tests/struct_unittest.cc |
+++ b/mojo/public/cpp/bindings/tests/struct_unittest.cc |
@@ -17,12 +17,7 @@ namespace test { |
namespace { |
RectPtr MakeRect(int32_t factor = 1) { |
- RectPtr rect(Rect::New()); |
- rect->x = 1 * factor; |
- rect->y = 2 * factor; |
- rect->width = 10 * factor; |
- rect->height = 20 * factor; |
- return rect; |
+ return Rect::New(1 * factor, 2 * factor, 10 * factor, 20 * factor); |
} |
void CheckRect(const Rect& rect, int32_t factor = 1) { |
@@ -33,19 +28,10 @@ void CheckRect(const Rect& rect, int32_t factor = 1) { |
} |
MultiVersionStructPtr MakeMultiVersionStruct() { |
- MultiVersionStructPtr output(MultiVersionStruct::New()); |
- output->f_int32 = 123; |
- output->f_rect = MakeRect(5); |
- output->f_string.emplace("hello"); |
- output->f_array.emplace(3); |
- (*output->f_array)[0] = 10; |
- (*output->f_array)[1] = 9; |
- (*output->f_array)[2] = 8; |
MessagePipe pipe; |
- output->f_message_pipe = std::move(pipe.handle0); |
- output->f_int16 = 42; |
- |
- return output; |
+ return MultiVersionStruct::New(123, MakeRect(5), std::string("hello"), |
+ std::vector<int8_t>{10, 9, 8}, |
+ std::move(pipe.handle0), false, 42); |
} |
template <typename U, typename T> |
@@ -166,9 +152,7 @@ TEST_F(StructTest, Construction_StructPointers) { |
// Serialization test of a struct with struct pointers. |
TEST_F(StructTest, Serialization_StructPointers) { |
- RectPairPtr pair(RectPair::New()); |
- pair->first = MakeRect(); |
- pair->second = MakeRect(); |
+ RectPairPtr pair(RectPair::New(MakeRect(), MakeRect())); |
size_t size = |
mojo::internal::PrepareToSerialize<RectPairDataView>(pair, nullptr); |
@@ -187,11 +171,12 @@ TEST_F(StructTest, Serialization_StructPointers) { |
// Serialization test of a struct with an array member. |
TEST_F(StructTest, Serialization_ArrayPointers) { |
- NamedRegionPtr region(NamedRegion::New()); |
- region->name.emplace("region"); |
- region->rects.emplace(4); |
- for (size_t i = 0; i < region->rects->size(); ++i) |
- (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); |
+ std::vector<RectPtr> rects; |
+ for (size_t i = 0; i < 4; ++i) |
+ rects.push_back(MakeRect(static_cast<int32_t>(i) + 1)); |
+ |
+ NamedRegionPtr region( |
+ NamedRegion::New(std::string("region"), std::move(rects))); |
size_t size = |
mojo::internal::PrepareToSerialize<NamedRegionDataView>(region, nullptr); |
@@ -247,10 +232,8 @@ TEST_F(StructTest, Serialization_NullArrayPointers) { |
// Tests deserializing structs as a newer version. |
TEST_F(StructTest, Versioning_OldToNew) { |
{ |
- MultiVersionStructV0Ptr input(MultiVersionStructV0::New()); |
- input->f_int32 = 123; |
- MultiVersionStructPtr expected_output(MultiVersionStruct::New()); |
- expected_output->f_int32 = 123; |
+ MultiVersionStructV0Ptr input(MultiVersionStructV0::New(123)); |
+ MultiVersionStructPtr expected_output(MultiVersionStruct::New(123)); |
MultiVersionStructPtr output = |
SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
@@ -259,12 +242,9 @@ TEST_F(StructTest, Versioning_OldToNew) { |
} |
{ |
- MultiVersionStructV1Ptr input(MultiVersionStructV1::New()); |
- input->f_int32 = 123; |
- input->f_rect = MakeRect(5); |
- MultiVersionStructPtr expected_output(MultiVersionStruct::New()); |
- expected_output->f_int32 = 123; |
- expected_output->f_rect = MakeRect(5); |
+ MultiVersionStructV1Ptr input(MultiVersionStructV1::New(123, MakeRect(5))); |
+ MultiVersionStructPtr expected_output( |
+ MultiVersionStruct::New(123, MakeRect(5))); |
MultiVersionStructPtr output = |
SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
@@ -273,14 +253,10 @@ TEST_F(StructTest, Versioning_OldToNew) { |
} |
{ |
- MultiVersionStructV3Ptr input(MultiVersionStructV3::New()); |
- input->f_int32 = 123; |
- input->f_rect = MakeRect(5); |
- input->f_string.emplace("hello"); |
- MultiVersionStructPtr expected_output(MultiVersionStruct::New()); |
- expected_output->f_int32 = 123; |
- expected_output->f_rect = MakeRect(5); |
- expected_output->f_string.emplace("hello"); |
+ MultiVersionStructV3Ptr input( |
+ MultiVersionStructV3::New(123, MakeRect(5), std::string("hello"))); |
+ MultiVersionStructPtr expected_output( |
+ MultiVersionStruct::New(123, MakeRect(5), std::string("hello"))); |
MultiVersionStructPtr output = |
SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
@@ -289,22 +265,10 @@ TEST_F(StructTest, Versioning_OldToNew) { |
} |
{ |
- MultiVersionStructV5Ptr input(MultiVersionStructV5::New()); |
- input->f_int32 = 123; |
- input->f_rect = MakeRect(5); |
- input->f_string.emplace("hello"); |
- input->f_array.emplace(3); |
- (*input->f_array)[0] = 10; |
- (*input->f_array)[1] = 9; |
- (*input->f_array)[2] = 8; |
- MultiVersionStructPtr expected_output(MultiVersionStruct::New()); |
- expected_output->f_int32 = 123; |
- expected_output->f_rect = MakeRect(5); |
- expected_output->f_string.emplace("hello"); |
- expected_output->f_array.emplace(3); |
- (*expected_output->f_array)[0] = 10; |
- (*expected_output->f_array)[1] = 9; |
- (*expected_output->f_array)[2] = 8; |
+ MultiVersionStructV5Ptr input(MultiVersionStructV5::New( |
+ 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
+ MultiVersionStructPtr expected_output(MultiVersionStruct::New( |
+ 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
MultiVersionStructPtr output = |
SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); |
@@ -313,25 +277,13 @@ TEST_F(StructTest, Versioning_OldToNew) { |
} |
{ |
- MultiVersionStructV7Ptr input(MultiVersionStructV7::New()); |
- input->f_int32 = 123; |
- input->f_rect = MakeRect(5); |
- input->f_string.emplace("hello"); |
- input->f_array.emplace(3); |
- (*input->f_array)[0] = 10; |
- (*input->f_array)[1] = 9; |
- (*input->f_array)[2] = 8; |
MessagePipe pipe; |
- input->f_message_pipe = std::move(pipe.handle0); |
- |
- MultiVersionStructPtr expected_output(MultiVersionStruct::New()); |
- expected_output->f_int32 = 123; |
- expected_output->f_rect = MakeRect(5); |
- expected_output->f_string.emplace("hello"); |
- expected_output->f_array.emplace(3); |
- (*expected_output->f_array)[0] = 10; |
- (*expected_output->f_array)[1] = 9; |
- (*expected_output->f_array)[2] = 8; |
+ MultiVersionStructV7Ptr input(MultiVersionStructV7::New( |
+ 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8}, |
+ std::move(pipe.handle0), false)); |
+ |
+ MultiVersionStructPtr expected_output(MultiVersionStruct::New( |
+ 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
// Save the raw handle value separately so that we can compare later. |
MojoHandle expected_handle = input->f_message_pipe.get().value(); |
@@ -348,14 +300,8 @@ TEST_F(StructTest, Versioning_OldToNew) { |
TEST_F(StructTest, Versioning_NewToOld) { |
{ |
MultiVersionStructPtr input = MakeMultiVersionStruct(); |
- MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New()); |
- expected_output->f_int32 = 123; |
- expected_output->f_rect = MakeRect(5); |
- expected_output->f_string.emplace("hello"); |
- expected_output->f_array.emplace(3); |
- (*expected_output->f_array)[0] = 10; |
- (*expected_output->f_array)[1] = 9; |
- (*expected_output->f_array)[2] = 8; |
+ MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New( |
+ 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
// Save the raw handle value separately so that we can compare later. |
MojoHandle expected_handle = input->f_message_pipe.get().value(); |
@@ -369,14 +315,8 @@ TEST_F(StructTest, Versioning_NewToOld) { |
{ |
MultiVersionStructPtr input = MakeMultiVersionStruct(); |
- MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New()); |
- expected_output->f_int32 = 123; |
- expected_output->f_rect = MakeRect(5); |
- expected_output->f_string.emplace("hello"); |
- expected_output->f_array.emplace(3); |
- (*expected_output->f_array)[0] = 10; |
- (*expected_output->f_array)[1] = 9; |
- (*expected_output->f_array)[2] = 8; |
+ MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New( |
+ 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8})); |
MultiVersionStructV5Ptr output = |
SerializeAndDeserialize<MultiVersionStructV5Ptr>(std::move(input)); |
@@ -386,10 +326,8 @@ TEST_F(StructTest, Versioning_NewToOld) { |
{ |
MultiVersionStructPtr input = MakeMultiVersionStruct(); |
- MultiVersionStructV3Ptr expected_output(MultiVersionStructV3::New()); |
- expected_output->f_int32 = 123; |
- expected_output->f_rect = MakeRect(5); |
- expected_output->f_string.emplace("hello"); |
+ MultiVersionStructV3Ptr expected_output( |
+ MultiVersionStructV3::New(123, MakeRect(5), std::string("hello"))); |
MultiVersionStructV3Ptr output = |
SerializeAndDeserialize<MultiVersionStructV3Ptr>(std::move(input)); |
@@ -399,9 +337,8 @@ TEST_F(StructTest, Versioning_NewToOld) { |
{ |
MultiVersionStructPtr input = MakeMultiVersionStruct(); |
- MultiVersionStructV1Ptr expected_output(MultiVersionStructV1::New()); |
- expected_output->f_int32 = 123; |
- expected_output->f_rect = MakeRect(5); |
+ MultiVersionStructV1Ptr expected_output( |
+ MultiVersionStructV1::New(123, MakeRect(5))); |
MultiVersionStructV1Ptr output = |
SerializeAndDeserialize<MultiVersionStructV1Ptr>(std::move(input)); |
@@ -411,8 +348,7 @@ TEST_F(StructTest, Versioning_NewToOld) { |
{ |
MultiVersionStructPtr input = MakeMultiVersionStruct(); |
- MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New()); |
- expected_output->f_int32 = 123; |
+ MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New(123)); |
MultiVersionStructV0Ptr output = |
SerializeAndDeserialize<MultiVersionStructV0Ptr>(std::move(input)); |
@@ -527,11 +463,11 @@ TEST_F(StructTest, Serialization_PublicAPI) { |
{ |
// A struct containing other objects. |
- NamedRegionPtr region(NamedRegion::New()); |
- region->name.emplace("region"); |
- region->rects.emplace(3); |
- for (size_t i = 0; i < region->rects->size(); ++i) |
- (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); |
+ std::vector<RectPtr> rects; |
+ for (size_t i = 0; i < 3; ++i) |
+ rects.push_back(MakeRect(static_cast<int32_t>(i) + 1)); |
+ NamedRegionPtr region( |
+ NamedRegion::New(std::string("region"), std::move(rects))); |
NamedRegionPtr cloned_region = region.Clone(); |
auto data = NamedRegion::Serialize(®ion); |
@@ -553,5 +489,27 @@ TEST_F(StructTest, Serialization_PublicAPI) { |
} |
} |
+TEST_F(StructTest, VersionedStructConstructor) { |
+ auto reordered = ReorderedStruct::New(123, 456, 789); |
+ EXPECT_EQ(123, reordered->a); |
+ EXPECT_EQ(456, reordered->b); |
+ EXPECT_EQ(789, reordered->c); |
+ |
+ reordered = ReorderedStruct::New(123, 456); |
+ EXPECT_EQ(123, reordered->a); |
+ EXPECT_EQ(6, reordered->b); |
+ EXPECT_EQ(456, reordered->c); |
+ |
+ reordered = ReorderedStruct::New(123); |
+ EXPECT_EQ(3, reordered->a); |
+ EXPECT_EQ(6, reordered->b); |
+ EXPECT_EQ(123, reordered->c); |
+ |
+ reordered = ReorderedStruct::New(); |
+ EXPECT_EQ(3, reordered->a); |
+ EXPECT_EQ(6, reordered->b); |
+ EXPECT_EQ(1, reordered->c); |
+} |
+ |
} // namespace test |
} // namespace mojo |