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

Side by Side Diff: mojo/public/cpp/bindings/tests/array_unittest.cc

Issue 1997473005: Remove requirement that mojo::Environment be instantiated. (Closed) Base URL: https://github.com/domokit/mojo.git@work797_no_utility_tls
Patch Set: SetDefaultAsyncWaiter Created 4 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/public/cpp/bindings/array.h" 5 #include "mojo/public/cpp/bindings/array.h"
6 #include "mojo/public/cpp/bindings/lib/array_internal.h" 6 #include "mojo/public/cpp/bindings/lib/array_internal.h"
7 #include "mojo/public/cpp/bindings/lib/array_serialization.h" 7 #include "mojo/public/cpp/bindings/lib/array_serialization.h"
8 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" 8 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
9 #include "mojo/public/cpp/bindings/tests/container_test_util.h" 9 #include "mojo/public/cpp/bindings/tests/container_test_util.h"
10 #include "mojo/public/cpp/bindings/tests/iterator_test_util.h" 10 #include "mojo/public/cpp/bindings/tests/iterator_test_util.h"
11 #include "mojo/public/cpp/environment/environment.h"
12 #include "mojo/public/interfaces/bindings/tests/test_arrays.mojom.h" 11 #include "mojo/public/interfaces/bindings/tests/test_arrays.mojom.h"
13 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" 12 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h"
14 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
15 14
16 namespace mojo { 15 namespace mojo {
17 namespace test { 16 namespace test {
18 namespace { 17 namespace {
19 18
20 using mojo::internal::Array_Data; 19 using mojo::internal::Array_Data;
21 using mojo::internal::ArrayValidateParams; 20 using mojo::internal::ArrayValidateParams;
22 using mojo::internal::FixedBufferForTesting; 21 using mojo::internal::FixedBufferForTesting;
23 using mojo::internal::String_Data; 22 using mojo::internal::String_Data;
24 23
25 class ArrayTest : public testing::Test {
26 public:
27 ~ArrayTest() override {}
28
29 private:
30 Environment env_;
31 };
32
33 // Tests that basic Array operations work. 24 // Tests that basic Array operations work.
34 TEST_F(ArrayTest, Basic) { 25 TEST(ArrayTest, Basic) {
35 auto array = Array<uint8_t>::New(8); 26 auto array = Array<uint8_t>::New(8);
36 for (size_t i = 0u; i < array.size(); ++i) { 27 for (size_t i = 0u; i < array.size(); ++i) {
37 uint8_t val = static_cast<uint8_t>(i * 2); 28 uint8_t val = static_cast<uint8_t>(i * 2);
38 array[i] = val; 29 array[i] = val;
39 EXPECT_EQ(val, array.at(i)); 30 EXPECT_EQ(val, array.at(i));
40 } 31 }
41 32
42 EXPECT_EQ(0u, *array.data()); 33 EXPECT_EQ(0u, *array.data());
43 EXPECT_EQ(2u, *(array.data() + 1)); 34 EXPECT_EQ(2u, *(array.data() + 1));
44 EXPECT_EQ(4u, *(array.data() + 2)); 35 EXPECT_EQ(4u, *(array.data() + 2));
45 } 36 }
46 37
47 TEST_F(ArrayTest, Testability) { 38 TEST(ArrayTest, Testability) {
48 Array<int32_t> array; 39 Array<int32_t> array;
49 EXPECT_FALSE(array); 40 EXPECT_FALSE(array);
50 EXPECT_TRUE(array.is_null()); 41 EXPECT_TRUE(array.is_null());
51 42
52 array.push_back(123); 43 array.push_back(123);
53 EXPECT_TRUE(array); 44 EXPECT_TRUE(array);
54 EXPECT_FALSE(array.is_null()); 45 EXPECT_FALSE(array.is_null());
55 } 46 }
56 47
57 void NullptrConstructorTestHelper(Array<int32_t> array) { 48 void NullptrConstructorTestHelper(Array<int32_t> array) {
58 EXPECT_FALSE(array); 49 EXPECT_FALSE(array);
59 EXPECT_TRUE(array.is_null()); 50 EXPECT_TRUE(array.is_null());
60 EXPECT_EQ(0u, array.size()); 51 EXPECT_EQ(0u, array.size());
61 } 52 }
62 53
63 TEST_F(ArrayTest, NullptrConstructor) { 54 TEST(ArrayTest, NullptrConstructor) {
64 Array<int32_t> array(nullptr); 55 Array<int32_t> array(nullptr);
65 EXPECT_FALSE(array); 56 EXPECT_FALSE(array);
66 EXPECT_TRUE(array.is_null()); 57 EXPECT_TRUE(array.is_null());
67 EXPECT_EQ(0u, array.size()); 58 EXPECT_EQ(0u, array.size());
68 59
69 array.push_back(123); 60 array.push_back(123);
70 EXPECT_TRUE(array); 61 EXPECT_TRUE(array);
71 EXPECT_FALSE(array.is_null()); 62 EXPECT_FALSE(array.is_null());
72 EXPECT_EQ(1u, array.size()); 63 EXPECT_EQ(1u, array.size());
73 64
74 // Test some implicit constructions of |Array<int32_t>| from a |nullptr|. 65 // Test some implicit constructions of |Array<int32_t>| from a |nullptr|.
75 array = nullptr; 66 array = nullptr;
76 NullptrConstructorTestHelper(nullptr); 67 NullptrConstructorTestHelper(nullptr);
77 } 68 }
78 69
79 // Tests that basic Array<bool> operations work. 70 // Tests that basic Array<bool> operations work.
80 TEST_F(ArrayTest, Bool) { 71 TEST(ArrayTest, Bool) {
81 auto array = Array<bool>::New(64); 72 auto array = Array<bool>::New(64);
82 for (size_t i = 0; i < array.size(); ++i) { 73 for (size_t i = 0; i < array.size(); ++i) {
83 bool val = i % 3 == 0; 74 bool val = i % 3 == 0;
84 array[i] = val; 75 array[i] = val;
85 EXPECT_EQ(val, array.at(i)); 76 EXPECT_EQ(val, array.at(i));
86 } 77 }
87 } 78 }
88 79
89 // Tests that Array<ScopedMessagePipeHandle> supports transferring handles. 80 // Tests that Array<ScopedMessagePipeHandle> supports transferring handles.
90 TEST_F(ArrayTest, Handle) { 81 TEST(ArrayTest, Handle) {
91 MessagePipe pipe; 82 MessagePipe pipe;
92 auto handles = Array<ScopedMessagePipeHandle>::New(2); 83 auto handles = Array<ScopedMessagePipeHandle>::New(2);
93 handles[0] = pipe.handle0.Pass(); 84 handles[0] = pipe.handle0.Pass();
94 handles[1].reset(pipe.handle1.release()); 85 handles[1].reset(pipe.handle1.release());
95 86
96 EXPECT_FALSE(pipe.handle0.is_valid()); 87 EXPECT_FALSE(pipe.handle0.is_valid());
97 EXPECT_FALSE(pipe.handle1.is_valid()); 88 EXPECT_FALSE(pipe.handle1.is_valid());
98 89
99 Array<ScopedMessagePipeHandle> handles2 = handles.Pass(); 90 Array<ScopedMessagePipeHandle> handles2 = handles.Pass();
100 EXPECT_TRUE(handles2[0].is_valid()); 91 EXPECT_TRUE(handles2[0].is_valid());
101 EXPECT_TRUE(handles2[1].is_valid()); 92 EXPECT_TRUE(handles2[1].is_valid());
102 93
103 ScopedMessagePipeHandle pipe_handle = handles2[0].Pass(); 94 ScopedMessagePipeHandle pipe_handle = handles2[0].Pass();
104 EXPECT_TRUE(pipe_handle.is_valid()); 95 EXPECT_TRUE(pipe_handle.is_valid());
105 EXPECT_FALSE(handles2[0].is_valid()); 96 EXPECT_FALSE(handles2[0].is_valid());
106 } 97 }
107 98
108 // Tests that Array<ScopedMessagePipeHandle> supports closing handles. 99 // Tests that Array<ScopedMessagePipeHandle> supports closing handles.
109 TEST_F(ArrayTest, HandlesAreClosed) { 100 TEST(ArrayTest, HandlesAreClosed) {
110 MessagePipe pipe; 101 MessagePipe pipe;
111 MojoHandle pipe0_value = pipe.handle0.get().value(); 102 MojoHandle pipe0_value = pipe.handle0.get().value();
112 MojoHandle pipe1_value = pipe.handle0.get().value(); 103 MojoHandle pipe1_value = pipe.handle0.get().value();
113 104
114 { 105 {
115 auto handles = Array<ScopedMessagePipeHandle>::New(2); 106 auto handles = Array<ScopedMessagePipeHandle>::New(2);
116 handles[0] = pipe.handle0.Pass(); 107 handles[0] = pipe.handle0.Pass();
117 handles[1].reset(pipe.handle0.release()); 108 handles[1].reset(pipe.handle0.release());
118 } 109 }
119 110
120 // We expect the pipes to have been closed. 111 // We expect the pipes to have been closed.
121 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe0_value)); 112 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe0_value));
122 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value)); 113 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value));
123 } 114 }
124 115
125 TEST_F(ArrayTest, Clone) { 116 TEST(ArrayTest, Clone) {
126 { 117 {
127 // Test POD. 118 // Test POD.
128 auto array = Array<int32_t>::New(3); 119 auto array = Array<int32_t>::New(3);
129 for (size_t i = 0; i < array.size(); ++i) 120 for (size_t i = 0; i < array.size(); ++i)
130 array[i] = static_cast<int32_t>(i); 121 array[i] = static_cast<int32_t>(i);
131 122
132 Array<int32_t> clone_array = array.Clone(); 123 Array<int32_t> clone_array = array.Clone();
133 EXPECT_EQ(array.size(), clone_array.size()); 124 EXPECT_EQ(array.size(), clone_array.size());
134 for (size_t i = 0; i < array.size(); ++i) 125 for (size_t i = 0; i < array.size(); ++i)
135 EXPECT_EQ(array[i], clone_array[i]); 126 EXPECT_EQ(array[i], clone_array[i]);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 EXPECT_EQ(array[1][1], clone_array[1][1]); 171 EXPECT_EQ(array[1][1], clone_array[1][1]);
181 } 172 }
182 173
183 { 174 {
184 // Test that array of handles still works although Clone() is not available. 175 // Test that array of handles still works although Clone() is not available.
185 auto array = Array<ScopedMessagePipeHandle>::New(10); 176 auto array = Array<ScopedMessagePipeHandle>::New(10);
186 EXPECT_FALSE(array[0].is_valid()); 177 EXPECT_FALSE(array[0].is_valid());
187 } 178 }
188 } 179 }
189 180
190 TEST_F(ArrayTest, Serialization_ArrayOfPOD) { 181 TEST(ArrayTest, Serialization_ArrayOfPOD) {
191 auto array = Array<int32_t>::New(4); 182 auto array = Array<int32_t>::New(4);
192 for (size_t i = 0; i < array.size(); ++i) 183 for (size_t i = 0; i < array.size(); ++i)
193 array[i] = static_cast<int32_t>(i); 184 array[i] = static_cast<int32_t>(i);
194 185
195 size_t size = GetSerializedSize_(array); 186 size_t size = GetSerializedSize_(array);
196 EXPECT_EQ(8U + 4 * 4U, size); 187 EXPECT_EQ(8U + 4 * 4U, size);
197 188
198 FixedBufferForTesting buf(size); 189 FixedBufferForTesting buf(size);
199 Array_Data<int32_t>* data = nullptr; 190 Array_Data<int32_t>* data = nullptr;
200 ArrayValidateParams validate_params(0, false, nullptr); 191 ArrayValidateParams validate_params(0, false, nullptr);
201 EXPECT_EQ(mojo::internal::ValidationError::NONE, 192 EXPECT_EQ(mojo::internal::ValidationError::NONE,
202 SerializeArray_(&array, &buf, &data, &validate_params)); 193 SerializeArray_(&array, &buf, &data, &validate_params));
203 194
204 Array<int32_t> array2; 195 Array<int32_t> array2;
205 Deserialize_(data, &array2); 196 Deserialize_(data, &array2);
206 197
207 EXPECT_EQ(4U, array2.size()); 198 EXPECT_EQ(4U, array2.size());
208 for (size_t i = 0; i < array2.size(); ++i) 199 for (size_t i = 0; i < array2.size(); ++i)
209 EXPECT_EQ(static_cast<int32_t>(i), array2[i]); 200 EXPECT_EQ(static_cast<int32_t>(i), array2[i]);
210 } 201 }
211 202
212 TEST_F(ArrayTest, Serialization_EmptyArrayOfPOD) { 203 TEST(ArrayTest, Serialization_EmptyArrayOfPOD) {
213 auto array = Array<int32_t>::New(0); 204 auto array = Array<int32_t>::New(0);
214 size_t size = GetSerializedSize_(array); 205 size_t size = GetSerializedSize_(array);
215 EXPECT_EQ(8U, size); 206 EXPECT_EQ(8U, size);
216 207
217 FixedBufferForTesting buf(size); 208 FixedBufferForTesting buf(size);
218 Array_Data<int32_t>* data = nullptr; 209 Array_Data<int32_t>* data = nullptr;
219 ArrayValidateParams validate_params(0, false, nullptr); 210 ArrayValidateParams validate_params(0, false, nullptr);
220 EXPECT_EQ(mojo::internal::ValidationError::NONE, 211 EXPECT_EQ(mojo::internal::ValidationError::NONE,
221 SerializeArray_(&array, &buf, &data, &validate_params)); 212 SerializeArray_(&array, &buf, &data, &validate_params));
222 213
223 Array<int32_t> array2; 214 Array<int32_t> array2;
224 Deserialize_(data, &array2); 215 Deserialize_(data, &array2);
225 EXPECT_EQ(0U, array2.size()); 216 EXPECT_EQ(0U, array2.size());
226 } 217 }
227 218
228 TEST_F(ArrayTest, Serialization_ArrayOfArrayOfPOD) { 219 TEST(ArrayTest, Serialization_ArrayOfArrayOfPOD) {
229 auto array = Array<Array<int32_t>>::New(2); 220 auto array = Array<Array<int32_t>>::New(2);
230 for (size_t j = 0; j < array.size(); ++j) { 221 for (size_t j = 0; j < array.size(); ++j) {
231 auto inner = Array<int32_t>::New(4); 222 auto inner = Array<int32_t>::New(4);
232 for (size_t i = 0; i < inner.size(); ++i) 223 for (size_t i = 0; i < inner.size(); ++i)
233 inner[i] = static_cast<int32_t>(i + (j * 10)); 224 inner[i] = static_cast<int32_t>(i + (j * 10));
234 array[j] = inner.Pass(); 225 array[j] = inner.Pass();
235 } 226 }
236 227
237 size_t size = GetSerializedSize_(array); 228 size_t size = GetSerializedSize_(array);
238 EXPECT_EQ(8U + 2 * 8U + 2 * (8U + 4 * 4U), size); 229 EXPECT_EQ(8U + 2 * 8U + 2 * (8U + 4 * 4U), size);
(...skipping 10 matching lines...) Expand all
249 240
250 EXPECT_EQ(2U, array2.size()); 241 EXPECT_EQ(2U, array2.size());
251 for (size_t j = 0; j < array2.size(); ++j) { 242 for (size_t j = 0; j < array2.size(); ++j) {
252 const Array<int32_t>& inner = array2[j]; 243 const Array<int32_t>& inner = array2[j];
253 EXPECT_EQ(4U, inner.size()); 244 EXPECT_EQ(4U, inner.size());
254 for (size_t i = 0; i < inner.size(); ++i) 245 for (size_t i = 0; i < inner.size(); ++i)
255 EXPECT_EQ(static_cast<int32_t>(i + (j * 10)), inner[i]); 246 EXPECT_EQ(static_cast<int32_t>(i + (j * 10)), inner[i]);
256 } 247 }
257 } 248 }
258 249
259 TEST_F(ArrayTest, Serialization_ArrayOfScopedEnum) { 250 TEST(ArrayTest, Serialization_ArrayOfScopedEnum) {
260 enum class TestEnum : int32_t { 251 enum class TestEnum : int32_t {
261 E0, 252 E0,
262 E1, 253 E1,
263 E2, 254 E2,
264 E3, 255 E3,
265 }; 256 };
266 static const TestEnum TEST_VALS[] = { 257 static const TestEnum TEST_VALS[] = {
267 TestEnum::E0, TestEnum::E2, TestEnum::E1, TestEnum::E3, 258 TestEnum::E0, TestEnum::E2, TestEnum::E1, TestEnum::E3,
268 TestEnum::E2, TestEnum::E2, TestEnum::E2, TestEnum::E0, 259 TestEnum::E2, TestEnum::E2, TestEnum::E2, TestEnum::E0,
269 }; 260 };
(...skipping 11 matching lines...) Expand all
281 SerializeArray_(&array, &buf, &data, &validate_params); 272 SerializeArray_(&array, &buf, &data, &validate_params);
282 273
283 Array<TestEnum> array2; 274 Array<TestEnum> array2;
284 Deserialize_(data, &array2); 275 Deserialize_(data, &array2);
285 276
286 EXPECT_EQ(MOJO_ARRAYSIZE(TEST_VALS), array2.size()); 277 EXPECT_EQ(MOJO_ARRAYSIZE(TEST_VALS), array2.size());
287 for (size_t i = 0; i < array2.size(); ++i) 278 for (size_t i = 0; i < array2.size(); ++i)
288 EXPECT_EQ(TEST_VALS[i], array2[i]); 279 EXPECT_EQ(TEST_VALS[i], array2[i]);
289 } 280 }
290 281
291 TEST_F(ArrayTest, Serialization_ArrayOfBool) { 282 TEST(ArrayTest, Serialization_ArrayOfBool) {
292 auto array = Array<bool>::New(10); 283 auto array = Array<bool>::New(10);
293 for (size_t i = 0; i < array.size(); ++i) 284 for (size_t i = 0; i < array.size(); ++i)
294 array[i] = i % 2 ? true : false; 285 array[i] = i % 2 ? true : false;
295 286
296 size_t size = GetSerializedSize_(array); 287 size_t size = GetSerializedSize_(array);
297 EXPECT_EQ(8U + 8U, size); 288 EXPECT_EQ(8U + 8U, size);
298 289
299 FixedBufferForTesting buf(size); 290 FixedBufferForTesting buf(size);
300 Array_Data<bool>* data = nullptr; 291 Array_Data<bool>* data = nullptr;
301 ArrayValidateParams validate_params(0, false, nullptr); 292 ArrayValidateParams validate_params(0, false, nullptr);
302 EXPECT_EQ(mojo::internal::ValidationError::NONE, 293 EXPECT_EQ(mojo::internal::ValidationError::NONE,
303 SerializeArray_(&array, &buf, &data, &validate_params)); 294 SerializeArray_(&array, &buf, &data, &validate_params));
304 295
305 Array<bool> array2; 296 Array<bool> array2;
306 Deserialize_(data, &array2); 297 Deserialize_(data, &array2);
307 298
308 EXPECT_EQ(10U, array2.size()); 299 EXPECT_EQ(10U, array2.size());
309 for (size_t i = 0; i < array2.size(); ++i) 300 for (size_t i = 0; i < array2.size(); ++i)
310 EXPECT_EQ(i % 2 ? true : false, array2[i]); 301 EXPECT_EQ(i % 2 ? true : false, array2[i]);
311 } 302 }
312 303
313 TEST_F(ArrayTest, Serialization_ArrayOfString) { 304 TEST(ArrayTest, Serialization_ArrayOfString) {
314 auto array = Array<String>::New(10); 305 auto array = Array<String>::New(10);
315 for (size_t i = 0; i < array.size(); ++i) { 306 for (size_t i = 0; i < array.size(); ++i) {
316 char c = 'A' + static_cast<char>(i); 307 char c = 'A' + static_cast<char>(i);
317 array[i] = String(&c, 1); 308 array[i] = String(&c, 1);
318 } 309 }
319 310
320 size_t size = GetSerializedSize_(array); 311 size_t size = GetSerializedSize_(array);
321 EXPECT_EQ(8U + // array header 312 EXPECT_EQ(8U + // array header
322 10 * 8U + // array payload (10 pointers) 313 10 * 8U + // array payload (10 pointers)
323 10 * (8U + // string header 314 10 * (8U + // string header
(...skipping 11 matching lines...) Expand all
335 Deserialize_(data, &array2); 326 Deserialize_(data, &array2);
336 327
337 EXPECT_EQ(10U, array2.size()); 328 EXPECT_EQ(10U, array2.size());
338 for (size_t i = 0; i < array2.size(); ++i) { 329 for (size_t i = 0; i < array2.size(); ++i) {
339 char c = 'A' + static_cast<char>(i); 330 char c = 'A' + static_cast<char>(i);
340 EXPECT_EQ(String(&c, 1), array2[i]); 331 EXPECT_EQ(String(&c, 1), array2[i]);
341 } 332 }
342 } 333 }
343 334
344 // Tests serializing and deserializing an Array<Handle>. 335 // Tests serializing and deserializing an Array<Handle>.
345 TEST_F(ArrayTest, Serialization_ArrayOfHandle) { 336 TEST(ArrayTest, Serialization_ArrayOfHandle) {
346 auto array = Array<ScopedHandleBase<MessagePipeHandle>>::New(4); 337 auto array = Array<ScopedHandleBase<MessagePipeHandle>>::New(4);
347 MessagePipe p0; 338 MessagePipe p0;
348 MessagePipe p1; 339 MessagePipe p1;
349 // array[0] is left invalid. 340 // array[0] is left invalid.
350 array[1] = p0.handle1.Pass(); 341 array[1] = p0.handle1.Pass();
351 array[2] = p1.handle0.Pass(); 342 array[2] = p1.handle0.Pass();
352 array[3] = p1.handle1.Pass(); 343 array[3] = p1.handle1.Pass();
353 344
354 size_t size = GetSerializedSize_(array); 345 size_t size = GetSerializedSize_(array);
355 EXPECT_EQ(8U // array header 346 EXPECT_EQ(8U // array header
(...skipping 25 matching lines...) Expand all
381 EXPECT_FALSE(array[2].is_valid()); 372 EXPECT_FALSE(array[2].is_valid());
382 EXPECT_FALSE(array[3].is_valid()); 373 EXPECT_FALSE(array[3].is_valid());
383 374
384 Deserialize_(data, &array); 375 Deserialize_(data, &array);
385 EXPECT_FALSE(array[0].is_valid()); 376 EXPECT_FALSE(array[0].is_valid());
386 EXPECT_TRUE(array[1].is_valid()); 377 EXPECT_TRUE(array[1].is_valid());
387 EXPECT_TRUE(array[2].is_valid()); 378 EXPECT_TRUE(array[2].is_valid());
388 EXPECT_TRUE(array[3].is_valid()); 379 EXPECT_TRUE(array[3].is_valid());
389 } 380 }
390 381
391 TEST_F(ArrayTest, Serialization_StructWithArraysOfHandles) { 382 TEST(ArrayTest, Serialization_StructWithArraysOfHandles) {
392 StructWithHandles handles_struct; 383 StructWithHandles handles_struct;
393 MessagePipe handle_pair_0; 384 MessagePipe handle_pair_0;
394 } 385 }
395 386
396 // Test serializing and deserializing an Array<InterfacePtr>. 387 // Test serializing and deserializing an Array<InterfacePtr>.
397 TEST_F(ArrayTest, Serialization_ArrayOfInterfacePtr) { 388 TEST(ArrayTest, Serialization_ArrayOfInterfacePtr) {
398 auto iface_array = Array<mojo::InterfaceHandle<TestInterface>>::New(1); 389 auto iface_array = Array<mojo::InterfaceHandle<TestInterface>>::New(1);
399 size_t size = GetSerializedSize_(iface_array); 390 size_t size = GetSerializedSize_(iface_array);
400 EXPECT_EQ(8U // array header 391 EXPECT_EQ(8U // array header
401 + (8U * 1), // Interface_Data * number of elements 392 + (8U * 1), // Interface_Data * number of elements
402 size); 393 size);
403 394
404 FixedBufferForTesting buf(size * 3); 395 FixedBufferForTesting buf(size * 3);
405 Array_Data<mojo::internal::Interface_Data>* output = nullptr; 396 Array_Data<mojo::internal::Interface_Data>* output = nullptr;
406 397
407 // 1. Invalid InterfacePtr should fail serialization. 398 // 1. Invalid InterfacePtr should fail serialization.
(...skipping 20 matching lines...) Expand all
428 mojo::internal::ValidationError::NONE, 419 mojo::internal::ValidationError::NONE,
429 SerializeArray_(&iface_array, &buf, &output, &validate_non_nullable)); 420 SerializeArray_(&iface_array, &buf, &output, &validate_non_nullable));
430 EXPECT_FALSE(iface_array[0].is_valid()); 421 EXPECT_FALSE(iface_array[0].is_valid());
431 422
432 Deserialize_(output, &iface_array); 423 Deserialize_(output, &iface_array);
433 EXPECT_TRUE(iface_array[0].is_valid()); 424 EXPECT_TRUE(iface_array[0].is_valid());
434 } 425 }
435 426
436 // Test serializing and deserializing a struct with an Array<> of another struct 427 // Test serializing and deserializing a struct with an Array<> of another struct
437 // which has an InterfacePtr. 428 // which has an InterfacePtr.
438 TEST_F(ArrayTest, Serialization_StructWithArrayOfInterfacePtr) { 429 TEST(ArrayTest, Serialization_StructWithArrayOfInterfacePtr) {
439 StructWithInterfaceArray struct_arr_iface; 430 StructWithInterfaceArray struct_arr_iface;
440 struct_arr_iface.structs_array = Array<StructWithInterfacePtr>::New(1); 431 struct_arr_iface.structs_array = Array<StructWithInterfacePtr>::New(1);
441 struct_arr_iface.nullable_structs_array = 432 struct_arr_iface.nullable_structs_array =
442 Array<StructWithInterfacePtr>::New(1); 433 Array<StructWithInterfacePtr>::New(1);
443 434
444 size_t size = GetSerializedSize_(struct_arr_iface); 435 size_t size = GetSerializedSize_(struct_arr_iface);
445 EXPECT_EQ(8U // struct header 436 EXPECT_EQ(8U // struct header
446 + 8U // offset to |structs_array| 437 + 8U // offset to |structs_array|
447 + (8U // array header 438 + (8U // array header
448 + 8U) // offset to StructWithInterface (nullptr) 439 + 8U) // offset to StructWithInterface (nullptr)
(...skipping 24 matching lines...) Expand all
473 Serialize_(&struct_arr_iface, &buf, &struct_arr_iface_data)); 464 Serialize_(&struct_arr_iface, &buf, &struct_arr_iface_data));
474 465
475 EXPECT_FALSE(struct_arr_iface.structs_array[0]->iptr.is_valid()); 466 EXPECT_FALSE(struct_arr_iface.structs_array[0]->iptr.is_valid());
476 467
477 Deserialize_(struct_arr_iface_data, &struct_arr_iface); 468 Deserialize_(struct_arr_iface_data, &struct_arr_iface);
478 EXPECT_TRUE(struct_arr_iface.structs_array[0]->iptr.is_valid()); 469 EXPECT_TRUE(struct_arr_iface.structs_array[0]->iptr.is_valid());
479 } 470 }
480 471
481 // Test serializing and deserializing a struct with an Array<> of interface 472 // Test serializing and deserializing a struct with an Array<> of interface
482 // requests. 473 // requests.
483 TEST_F(ArrayTest, Serialization_StructWithArrayOfIntefaceRequest) { 474 TEST(ArrayTest, Serialization_StructWithArrayOfIntefaceRequest) {
484 StructWithInterfaceRequests struct_arr_iface_req; 475 StructWithInterfaceRequests struct_arr_iface_req;
485 struct_arr_iface_req.req_array = 476 struct_arr_iface_req.req_array =
486 Array<InterfaceRequest<TestInterface>>::New(1); 477 Array<InterfaceRequest<TestInterface>>::New(1);
487 struct_arr_iface_req.nullable_req_array = 478 struct_arr_iface_req.nullable_req_array =
488 Array<InterfaceRequest<TestInterface>>::New(1); 479 Array<InterfaceRequest<TestInterface>>::New(1);
489 480
490 size_t size = GetSerializedSize_(struct_arr_iface_req); 481 size_t size = GetSerializedSize_(struct_arr_iface_req);
491 EXPECT_EQ(8U // struct header 482 EXPECT_EQ(8U // struct header
492 + 8U // offset to |req_array| 483 + 8U // offset to |req_array|
493 + (8U // array header for |req_array| 484 + (8U // array header for |req_array|
(...skipping 23 matching lines...) Expand all
517 EXPECT_EQ( 508 EXPECT_EQ(
518 mojo::internal::ValidationError::NONE, 509 mojo::internal::ValidationError::NONE,
519 Serialize_(&struct_arr_iface_req, &buf, &struct_arr_iface_req_data)); 510 Serialize_(&struct_arr_iface_req, &buf, &struct_arr_iface_req_data));
520 511
521 EXPECT_FALSE(struct_arr_iface_req.req_array[0].is_pending()); 512 EXPECT_FALSE(struct_arr_iface_req.req_array[0].is_pending());
522 513
523 Deserialize_(struct_arr_iface_req_data, &struct_arr_iface_req); 514 Deserialize_(struct_arr_iface_req_data, &struct_arr_iface_req);
524 EXPECT_TRUE(struct_arr_iface_req.req_array[0].is_pending()); 515 EXPECT_TRUE(struct_arr_iface_req.req_array[0].is_pending());
525 } 516 }
526 517
527 TEST_F(ArrayTest, Resize_Copyable) { 518 TEST(ArrayTest, Resize_Copyable) {
528 ASSERT_EQ(0u, CopyableType::num_instances()); 519 ASSERT_EQ(0u, CopyableType::num_instances());
529 auto array = mojo::Array<CopyableType>::New(3); 520 auto array = mojo::Array<CopyableType>::New(3);
530 std::vector<CopyableType*> value_ptrs; 521 std::vector<CopyableType*> value_ptrs;
531 value_ptrs.push_back(array[0].ptr()); 522 value_ptrs.push_back(array[0].ptr());
532 value_ptrs.push_back(array[1].ptr()); 523 value_ptrs.push_back(array[1].ptr());
533 524
534 for (size_t i = 0; i < array.size(); i++) 525 for (size_t i = 0; i < array.size(); i++)
535 array[i].ResetCopied(); 526 array[i].ResetCopied();
536 527
537 array.resize(2); 528 array.resize(2);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 EXPECT_EQ(value_ptrs[i], array[i].ptr()); 560 EXPECT_EQ(value_ptrs[i], array[i].ptr());
570 } 561 }
571 array.reset(); 562 array.reset();
572 EXPECT_EQ(0u, CopyableType::num_instances()); 563 EXPECT_EQ(0u, CopyableType::num_instances());
573 EXPECT_FALSE(array); 564 EXPECT_FALSE(array);
574 array.resize(0); 565 array.resize(0);
575 EXPECT_EQ(0u, CopyableType::num_instances()); 566 EXPECT_EQ(0u, CopyableType::num_instances());
576 EXPECT_TRUE(array); 567 EXPECT_TRUE(array);
577 } 568 }
578 569
579 TEST_F(ArrayTest, Resize_MoveOnly) { 570 TEST(ArrayTest, Resize_MoveOnly) {
580 ASSERT_EQ(0u, MoveOnlyType::num_instances()); 571 ASSERT_EQ(0u, MoveOnlyType::num_instances());
581 auto array = mojo::Array<MoveOnlyType>::New(3); 572 auto array = mojo::Array<MoveOnlyType>::New(3);
582 std::vector<MoveOnlyType*> value_ptrs; 573 std::vector<MoveOnlyType*> value_ptrs;
583 value_ptrs.push_back(array[0].ptr()); 574 value_ptrs.push_back(array[0].ptr());
584 value_ptrs.push_back(array[1].ptr()); 575 value_ptrs.push_back(array[1].ptr());
585 576
586 for (size_t i = 0; i < array.size(); i++) 577 for (size_t i = 0; i < array.size(); i++)
587 EXPECT_FALSE(array[i].moved()); 578 EXPECT_FALSE(array[i].moved());
588 579
589 array.resize(2); 580 array.resize(2);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 EXPECT_FALSE(array[i].moved()); 612 EXPECT_FALSE(array[i].moved());
622 613
623 array.reset(); 614 array.reset();
624 EXPECT_EQ(0u, MoveOnlyType::num_instances()); 615 EXPECT_EQ(0u, MoveOnlyType::num_instances());
625 EXPECT_FALSE(array); 616 EXPECT_FALSE(array);
626 array.resize(0); 617 array.resize(0);
627 EXPECT_EQ(0u, MoveOnlyType::num_instances()); 618 EXPECT_EQ(0u, MoveOnlyType::num_instances());
628 EXPECT_TRUE(array); 619 EXPECT_TRUE(array);
629 } 620 }
630 621
631 TEST_F(ArrayTest, PushBack_Copyable) { 622 TEST(ArrayTest, PushBack_Copyable) {
632 ASSERT_EQ(0u, CopyableType::num_instances()); 623 ASSERT_EQ(0u, CopyableType::num_instances());
633 auto array = mojo::Array<CopyableType>::New(2); 624 auto array = mojo::Array<CopyableType>::New(2);
634 array.reset(); 625 array.reset();
635 std::vector<CopyableType*> value_ptrs; 626 std::vector<CopyableType*> value_ptrs;
636 size_t capacity = array.storage().capacity(); 627 size_t capacity = array.storage().capacity();
637 for (size_t i = 0; i < capacity; i++) { 628 for (size_t i = 0; i < capacity; i++) {
638 CopyableType value; 629 CopyableType value;
639 value_ptrs.push_back(value.ptr()); 630 value_ptrs.push_back(value.ptr());
640 array.push_back(value); 631 array.push_back(value);
641 ASSERT_EQ(i + 1, array.size()); 632 ASSERT_EQ(i + 1, array.size());
(...skipping 14 matching lines...) Expand all
656 EXPECT_EQ(array.size(), CopyableType::num_instances()); 647 EXPECT_EQ(array.size(), CopyableType::num_instances());
657 648
658 for (size_t i = 0; i < array.size(); i++) { 649 for (size_t i = 0; i < array.size(); i++) {
659 EXPECT_TRUE(array[i].copied()); 650 EXPECT_TRUE(array[i].copied());
660 EXPECT_EQ(value_ptrs[i], array[i].ptr()); 651 EXPECT_EQ(value_ptrs[i], array[i].ptr());
661 } 652 }
662 array.reset(); 653 array.reset();
663 EXPECT_EQ(0u, CopyableType::num_instances()); 654 EXPECT_EQ(0u, CopyableType::num_instances());
664 } 655 }
665 656
666 TEST_F(ArrayTest, PushBack_MoveOnly) { 657 TEST(ArrayTest, PushBack_MoveOnly) {
667 ASSERT_EQ(0u, MoveOnlyType::num_instances()); 658 ASSERT_EQ(0u, MoveOnlyType::num_instances());
668 auto array = mojo::Array<MoveOnlyType>::New(2); 659 auto array = mojo::Array<MoveOnlyType>::New(2);
669 array.reset(); 660 array.reset();
670 std::vector<MoveOnlyType*> value_ptrs; 661 std::vector<MoveOnlyType*> value_ptrs;
671 size_t capacity = array.storage().capacity(); 662 size_t capacity = array.storage().capacity();
672 for (size_t i = 0; i < capacity; i++) { 663 for (size_t i = 0; i < capacity; i++) {
673 MoveOnlyType value; 664 MoveOnlyType value;
674 value_ptrs.push_back(value.ptr()); 665 value_ptrs.push_back(value.ptr());
675 array.push_back(value.Pass()); 666 array.push_back(value.Pass());
676 ASSERT_EQ(i + 1, array.size()); 667 ASSERT_EQ(i + 1, array.size());
(...skipping 14 matching lines...) Expand all
691 EXPECT_EQ(array.size(), MoveOnlyType::num_instances()); 682 EXPECT_EQ(array.size(), MoveOnlyType::num_instances());
692 683
693 for (size_t i = 0; i < array.size(); i++) { 684 for (size_t i = 0; i < array.size(); i++) {
694 EXPECT_TRUE(array[i].moved()); 685 EXPECT_TRUE(array[i].moved());
695 EXPECT_EQ(value_ptrs[i], array[i].ptr()); 686 EXPECT_EQ(value_ptrs[i], array[i].ptr());
696 } 687 }
697 array.reset(); 688 array.reset();
698 EXPECT_EQ(0u, MoveOnlyType::num_instances()); 689 EXPECT_EQ(0u, MoveOnlyType::num_instances());
699 } 690 }
700 691
701 TEST_F(ArrayTest, Iterator) { 692 TEST(ArrayTest, Iterator) {
702 std::vector<int> values; 693 std::vector<int> values;
703 values.push_back(0); 694 values.push_back(0);
704 values.push_back(1); 695 values.push_back(1);
705 values.push_back(2); 696 values.push_back(2);
706 values.push_back(3); 697 values.push_back(3);
707 Array<int> arr = Array<int>::From(values); 698 Array<int> arr = Array<int>::From(values);
708 699
709 // Test RandomAcessIterator traits. 700 // Test RandomAcessIterator traits.
710 { 701 {
711 // Test +,-,+=,-=. 702 // Test +,-,+=,-=.
(...skipping 29 matching lines...) Expand all
741 } 732 }
742 733
743 { 734 {
744 SCOPED_TRACE("Array iterator bidirectionality test."); 735 SCOPED_TRACE("Array iterator bidirectionality test.");
745 ExpectBidiIteratorConcept(arr.begin(), arr.end(), values); 736 ExpectBidiIteratorConcept(arr.begin(), arr.end(), values);
746 ExpectBidiMutableIteratorConcept(arr.begin(), arr.end(), values); 737 ExpectBidiMutableIteratorConcept(arr.begin(), arr.end(), values);
747 } 738 }
748 } 739 }
749 740
750 // Test serializing and deserializing of an array with null elements. 741 // Test serializing and deserializing of an array with null elements.
751 TEST_F(ArrayTest, Serialization_ArrayOfStructPtr) { 742 TEST(ArrayTest, Serialization_ArrayOfStructPtr) {
752 ArrayValidateParams validate_nullable(2, true, nullptr); 743 ArrayValidateParams validate_nullable(2, true, nullptr);
753 ArrayValidateParams validate_non_nullable(2, false, nullptr); 744 ArrayValidateParams validate_non_nullable(2, false, nullptr);
754 745
755 Array<RectPtr> array = Array<RectPtr>::New(2); 746 Array<RectPtr> array = Array<RectPtr>::New(2);
756 array[1] = Rect::New(); 747 array[1] = Rect::New();
757 array[1]->x = 1; 748 array[1]->x = 1;
758 array[1]->y = 2; 749 array[1]->y = 2;
759 array[1]->width = 3; 750 array[1]->width = 3;
760 array[1]->height = 4; 751 array[1]->height = 4;
761 752
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 EXPECT_EQ(1, array3[1]->x); 815 EXPECT_EQ(1, array3[1]->x);
825 EXPECT_EQ(2, array3[1]->y); 816 EXPECT_EQ(2, array3[1]->y);
826 EXPECT_EQ(3, array3[1]->width); 817 EXPECT_EQ(3, array3[1]->width);
827 EXPECT_EQ(4, array3[1]->height); 818 EXPECT_EQ(4, array3[1]->height);
828 } 819 }
829 } 820 }
830 821
831 } // namespace 822 } // namespace
832 } // namespace test 823 } // namespace test
833 } // namespace mojo 824 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698