| 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 1dee5660740d06abc00d5f3919a671128793ab0c..82a705fbedeb58bd8ea24e067f489b377fcde339 100644
|
| --- a/mojo/public/cpp/bindings/tests/array_unittest.cc
|
| +++ b/mojo/public/cpp/bindings/tests/array_unittest.cc
|
| @@ -7,12 +7,19 @@
|
| #include "mojo/public/cpp/bindings/lib/array_serialization.h"
|
| #include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
|
| #include "mojo/public/cpp/environment/environment.h"
|
| +#include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace mojo {
|
| namespace test {
|
| namespace {
|
|
|
| +using mojo::internal::Array_Data;
|
| +using mojo::internal::ArrayValidateParams;
|
| +using mojo::internal::FixedBuffer;
|
| +using mojo::internal::NoValidateParams;
|
| +using mojo::internal::String_Data;
|
| +
|
| class CopyableType {
|
| public:
|
| CopyableType() : copied_(false), ptr_(this) { num_instances_++; }
|
| @@ -131,6 +138,71 @@ TEST_F(ArrayTest, HandlesAreClosed) {
|
| EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value));
|
| }
|
|
|
| +TEST_F(ArrayTest, Clone) {
|
| + {
|
| + // Test POD.
|
| + Array<int32_t> array(3);
|
| + for (size_t i = 0; i < array.size(); ++i)
|
| + array[i] = static_cast<int32_t>(i);
|
| +
|
| + Array<int32_t> clone_array = array.Clone();
|
| + EXPECT_EQ(array.size(), clone_array.size());
|
| + for (size_t i = 0; i < array.size(); ++i)
|
| + EXPECT_EQ(array[i], clone_array[i]);
|
| + }
|
| +
|
| + {
|
| + // Test copyable object.
|
| + Array<String> array(2);
|
| + array[0] = "hello";
|
| + array[1] = "world";
|
| +
|
| + Array<String> clone_array = array.Clone();
|
| + EXPECT_EQ(array.size(), clone_array.size());
|
| + for (size_t i = 0; i < array.size(); ++i)
|
| + EXPECT_EQ(array[i], clone_array[i]);
|
| + }
|
| +
|
| + {
|
| + // Test struct.
|
| + Array<RectPtr> array(2);
|
| + array[1] = Rect::New();
|
| + array[1]->x = 1;
|
| + array[1]->y = 2;
|
| + array[1]->width = 3;
|
| + array[1]->height = 4;
|
| +
|
| + Array<RectPtr> clone_array = array.Clone();
|
| + EXPECT_EQ(array.size(), clone_array.size());
|
| + EXPECT_TRUE(clone_array[0].is_null());
|
| + EXPECT_EQ(array[1]->x, clone_array[1]->x);
|
| + EXPECT_EQ(array[1]->y, clone_array[1]->y);
|
| + EXPECT_EQ(array[1]->width, clone_array[1]->width);
|
| + EXPECT_EQ(array[1]->height, clone_array[1]->height);
|
| + }
|
| +
|
| + {
|
| + // Test array of array.
|
| + Array<Array<int8_t>> array(2);
|
| + array[1] = Array<int8_t>(2);
|
| + array[1][0] = 0;
|
| + array[1][1] = 1;
|
| +
|
| + Array<Array<int8_t>> clone_array = array.Clone();
|
| + EXPECT_EQ(array.size(), clone_array.size());
|
| + EXPECT_TRUE(clone_array[0].is_null());
|
| + EXPECT_EQ(array[1].size(), clone_array[1].size());
|
| + EXPECT_EQ(array[1][0], clone_array[1][0]);
|
| + EXPECT_EQ(array[1][1], clone_array[1][1]);
|
| + }
|
| +
|
| + {
|
| + // Test that array of handles still works although Clone() is not available.
|
| + Array<ScopedMessagePipeHandle> array(10);
|
| + EXPECT_FALSE(array[0].is_valid());
|
| + }
|
| +}
|
| +
|
| TEST_F(ArrayTest, Serialization_ArrayOfPOD) {
|
| Array<int32_t> array(4);
|
| for (size_t i = 0; i < array.size(); ++i)
|
| @@ -139,10 +211,9 @@ TEST_F(ArrayTest, Serialization_ArrayOfPOD) {
|
| size_t size = GetSerializedSize_(array);
|
| EXPECT_EQ(8U + 4*4U, size);
|
|
|
| - internal::FixedBuffer buf(size);
|
| - internal::Array_Data<int32_t>* data;
|
| - SerializeArray_<internal::ArrayValidateParams<0, false,
|
| - internal::NoValidateParams> >(
|
| + FixedBuffer buf(size);
|
| + Array_Data<int32_t>* data;
|
| + SerializeArray_<ArrayValidateParams<0, false, NoValidateParams>>(
|
| array.Pass(), &buf, &data);
|
|
|
| Array<int32_t> array2;
|
| @@ -154,7 +225,7 @@ TEST_F(ArrayTest, Serialization_ArrayOfPOD) {
|
| }
|
|
|
| TEST_F(ArrayTest, Serialization_ArrayOfArrayOfPOD) {
|
| - Array<Array<int32_t> > array(2);
|
| + Array<Array<int32_t>> array(2);
|
| for (size_t j = 0; j < array.size(); ++j) {
|
| Array<int32_t> inner(4);
|
| for (size_t i = 0; i < inner.size(); ++i)
|
| @@ -165,14 +236,14 @@ TEST_F(ArrayTest, Serialization_ArrayOfArrayOfPOD) {
|
| size_t size = GetSerializedSize_(array);
|
| EXPECT_EQ(8U + 2*8U + 2*(8U + 4*4U), size);
|
|
|
| - internal::FixedBuffer buf(size);
|
| - internal::Array_Data<internal::Array_Data<int32_t>*>* data;
|
| - SerializeArray_<internal::ArrayValidateParams<0, false,
|
| - internal::ArrayValidateParams<0, false,
|
| - internal::NoValidateParams> > >(
|
| + FixedBuffer buf(size);
|
| + Array_Data<Array_Data<int32_t>*>* data;
|
| + SerializeArray_<ArrayValidateParams<0, false,
|
| + ArrayValidateParams<0, false,
|
| + NoValidateParams>>>(
|
| array.Pass(), &buf, &data);
|
|
|
| - Array<Array<int32_t> > array2;
|
| + Array<Array<int32_t>> array2;
|
| Deserialize_(data, &array2);
|
|
|
| EXPECT_EQ(2U, array2.size());
|
| @@ -192,10 +263,9 @@ TEST_F(ArrayTest, Serialization_ArrayOfBool) {
|
| size_t size = GetSerializedSize_(array);
|
| EXPECT_EQ(8U + 8U, size);
|
|
|
| - internal::FixedBuffer buf(size);
|
| - internal::Array_Data<bool>* data;
|
| - SerializeArray_<internal::ArrayValidateParams<0, false,
|
| - internal::NoValidateParams> >(
|
| + FixedBuffer buf(size);
|
| + Array_Data<bool>* data;
|
| + SerializeArray_<ArrayValidateParams<0, false, NoValidateParams>>(
|
| array.Pass(), &buf, &data);
|
|
|
| Array<bool> array2;
|
| @@ -220,11 +290,11 @@ TEST_F(ArrayTest, Serialization_ArrayOfString) {
|
| 8U), // string length of 1 padded to 8
|
| size);
|
|
|
| - internal::FixedBuffer buf(size);
|
| - internal::Array_Data<internal::String_Data*>* data;
|
| - SerializeArray_<internal::ArrayValidateParams<0, false,
|
| - internal::ArrayValidateParams<0, false,
|
| - internal::NoValidateParams> > >(
|
| + FixedBuffer buf(size);
|
| + Array_Data<String_Data*>* data;
|
| + SerializeArray_<ArrayValidateParams<0, false,
|
| + ArrayValidateParams<0, false,
|
| + NoValidateParams>>>(
|
| array.Pass(), &buf, &data);
|
|
|
| Array<String> array2;
|
|
|