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

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

Issue 615063003: Mojo cpp bindings: support Clone() for structs and arrays which don't contain handles. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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/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;

Powered by Google App Engine
This is Rietveld 408576698