Index: mojo/public/cpp/bindings/tests/array_unittest.cc |
diff --git a/mojo/public/cpp/bindings/tests/array_unittest.cc b/mojo/public/cpp/bindings/tests/array_unittest.cc |
index ed9a64709c576ee5bd94fedc2977b96049b284b6..90c8a321748ebd3bc38825c615e69f379ad95a1a 100644 |
--- a/mojo/public/cpp/bindings/tests/array_unittest.cc |
+++ b/mojo/public/cpp/bindings/tests/array_unittest.cc |
@@ -9,6 +9,7 @@ |
#include "mojo/public/cpp/bindings/tests/container_test_util.h" |
#include "mojo/public/cpp/environment/environment.h" |
#include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" |
+#include "mojo/public/interfaces/bindings/tests/test_unions.mojom.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace mojo { |
@@ -445,6 +446,69 @@ TEST_F(ArrayTest, PushBack_MoveOnly) { |
EXPECT_EQ(0u, MoveOnlyType::num_instances()); |
} |
+TEST_F(ArrayTest, PodUnionInArray) { |
+ SmallStructPtr small_struct(SmallStruct::New()); |
+ small_struct->pod_union_array = Array<PodUnionPtr>(2); |
+ small_struct->pod_union_array[0] = PodUnion::New(); |
+ small_struct->pod_union_array[1] = PodUnion::New(); |
+ |
+ small_struct->pod_union_array[0]->set_f_int8(10); |
+ small_struct->pod_union_array[1]->set_f_int16(12); |
+ |
+ EXPECT_EQ(10, small_struct->pod_union_array[0]->get_f_int8()); |
+ EXPECT_EQ(12, small_struct->pod_union_array[1]->get_f_int16()); |
+} |
+ |
+TEST_F(ArrayTest, PodUnionInArraySerialization) { |
+ Array<PodUnionPtr> array(2); |
+ array[0] = PodUnion::New(); |
+ array[1] = PodUnion::New(); |
+ |
+ array[0]->set_f_int8(10); |
+ array[1]->set_f_int16(12); |
+ EXPECT_EQ(2U, array.size()); |
+ |
+ size_t size = GetSerializedSize_(array); |
+ EXPECT_EQ(40U, size); |
+ |
+ mojo::internal::FixedBuffer buf(size); |
+ mojo::internal::Array_Data<internal::PodUnion_Data>* data; |
+ SerializeArray_<mojo::internal::ArrayValidateParams< |
+ 0, false, mojo::internal::NoValidateParams>>(array.Pass(), &buf, &data); |
+ |
+ Array<PodUnionPtr> array2; |
+ Deserialize_(data, &array2); |
+ |
+ EXPECT_EQ(2U, array2.size()); |
+ |
+ EXPECT_EQ(10, array2[0]->get_f_int8()); |
+ EXPECT_EQ(12, array2[1]->get_f_int16()); |
+} |
+ |
+TEST_F(ArrayTest, PodUnionInArraySerializationWithNull) { |
+ Array<PodUnionPtr> array(2); |
+ array[0] = PodUnion::New(); |
+ |
+ array[0]->set_f_int8(10); |
+ EXPECT_EQ(2U, array.size()); |
+ |
+ size_t size = GetSerializedSize_(array); |
+ EXPECT_EQ(40U, size); |
+ |
+ mojo::internal::FixedBuffer buf(size); |
+ mojo::internal::Array_Data<internal::PodUnion_Data>* data; |
+ SerializeArray_<mojo::internal::ArrayValidateParams< |
+ 0, true, mojo::internal::NoValidateParams>>(array.Pass(), &buf, &data); |
+ |
+ Array<PodUnionPtr> array2; |
+ Deserialize_(data, &array2); |
+ |
+ EXPECT_EQ(2U, array2.size()); |
+ |
+ EXPECT_EQ(10, array2[0]->get_f_int8()); |
+ EXPECT_TRUE(array2[1].is_null()); |
+} |
+ |
} // namespace |
} // namespace test |
} // namespace mojo |