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

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

Issue 923033003: Implement unions as members of structs. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 9 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/lib/array_internal.h"
6 #include "mojo/public/cpp/bindings/lib/array_serialization.h"
5 #include "mojo/public/cpp/bindings/lib/bounds_checker.h" 7 #include "mojo/public/cpp/bindings/lib/bounds_checker.h"
6 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" 8 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
7 #include "mojo/public/cpp/bindings/string.h" 9 #include "mojo/public/cpp/bindings/string.h"
8 #include "mojo/public/cpp/environment/environment.h" 10 #include "mojo/public/cpp/environment/environment.h"
9 #include "mojo/public/interfaces/bindings/tests/test_unions.mojom.h" 11 #include "mojo/public/interfaces/bindings/tests/test_unions.mojom.h"
10 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
11 13
12 namespace mojo { 14 namespace mojo {
13 namespace test { 15 namespace test {
14 16
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 } 103 }
102 104
103 TEST(UnionTest, SerializationPod) { 105 TEST(UnionTest, SerializationPod) {
104 PodUnionPtr pod1(PodUnion::New()); 106 PodUnionPtr pod1(PodUnion::New());
105 pod1->set_f_int8(10); 107 pod1->set_f_int8(10);
106 108
107 size_t size = GetSerializedSize_(pod1); 109 size_t size = GetSerializedSize_(pod1);
108 EXPECT_EQ(16U, size); 110 EXPECT_EQ(16U, size);
109 111
110 mojo::internal::FixedBuffer buf(size); 112 mojo::internal::FixedBuffer buf(size);
111 internal::PodUnion_Data* data; 113 internal::PodUnion_Data* data = nullptr;
112 Serialize_(pod1.Pass(), &buf, &data); 114 SerializeUnion_(pod1.Pass(), &buf, &data, false);
113 115
114 PodUnionPtr pod2; 116 PodUnionPtr pod2;
115 Deserialize_(data, &pod2); 117 Deserialize_(data, &pod2);
116 118
117 EXPECT_EQ(10, pod2->get_f_int8()); 119 EXPECT_EQ(10, pod2->get_f_int8());
118 EXPECT_TRUE(pod2->is_f_int8()); 120 EXPECT_TRUE(pod2->is_f_int8());
119 EXPECT_EQ(pod2->which(), PodUnion::Tag::F_INT8); 121 EXPECT_EQ(pod2->which(), PodUnion::Tag::F_INT8);
120 } 122 }
121 123
122 TEST(UnionTest, ValidationJustWorksPod) { 124 TEST(UnionTest, PodValidation) {
123 PodUnionPtr pod(PodUnion::New()); 125 PodUnionPtr pod(PodUnion::New());
124 pod->set_f_int8(10); 126 pod->set_f_int8(10);
125 127
126 size_t size = GetSerializedSize_(pod); 128 size_t size = GetSerializedSize_(pod);
127 EXPECT_EQ(16U, size); 129 EXPECT_EQ(16U, size);
128 130
129 mojo::internal::FixedBuffer buf(size); 131 mojo::internal::FixedBuffer buf(size);
130 internal::PodUnion_Data* data; 132 internal::PodUnion_Data* data = nullptr;
131 Serialize_(pod.Pass(), &buf, &data); 133 SerializeUnion_(pod.Pass(), &buf, &data, false);
132 void* raw_buf = buf.Leak(); 134 void* raw_buf = buf.Leak();
133 mojo::internal::BoundsChecker bounds_checker(data, 135 mojo::internal::BoundsChecker bounds_checker(data,
134 static_cast<uint32_t>(size), 0); 136 static_cast<uint32_t>(size), 0);
135 EXPECT_TRUE(internal::PodUnion_Data::Validate(raw_buf, &bounds_checker)); 137 EXPECT_TRUE(
138 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, false));
136 free(raw_buf); 139 free(raw_buf);
137 } 140 }
138 141
142 TEST(UnionTest, SerializeNotNull) {
143 PodUnionPtr pod(PodUnion::New());
144 pod->set_f_int8(0);
145 size_t size = GetSerializedSize_(pod);
146 mojo::internal::FixedBuffer buf(size);
147 internal::PodUnion_Data* data = nullptr;
148 SerializeUnion_(pod.Pass(), &buf, &data, false);
149 EXPECT_FALSE(data->is_null());
150 }
151
152 TEST(UnionTest, SerializeIsNull) {
153 PodUnionPtr pod;
154 size_t size = GetSerializedSize_(pod);
155 EXPECT_EQ(16U, size);
156 mojo::internal::FixedBuffer buf(size);
157 internal::PodUnion_Data* data = nullptr;
158 SerializeUnion_(pod.Pass(), &buf, &data, false);
159 EXPECT_TRUE(data->is_null());
160
161 PodUnionPtr pod2;
162 Deserialize_(data, &pod2);
163 EXPECT_TRUE(pod2.is_null());
164 }
165
139 TEST(UnionTest, NullValidation) { 166 TEST(UnionTest, NullValidation) {
140 void* buf = nullptr; 167 void* buf = nullptr;
141 mojo::internal::BoundsChecker bounds_checker(buf, 0, 0); 168 mojo::internal::BoundsChecker bounds_checker(buf, 0, 0);
142 EXPECT_TRUE(internal::PodUnion_Data::Validate(buf, &bounds_checker)); 169 EXPECT_TRUE(internal::PodUnion_Data::Validate(buf, &bounds_checker, false));
143 } 170 }
144 171
145 TEST(UnionTest, OutOfAlignmentValidation) { 172 TEST(UnionTest, OutOfAlignmentValidation) {
146 Environment environment; 173 Environment environment;
147 size_t size = sizeof(internal::PodUnion_Data); 174 size_t size = sizeof(internal::PodUnion_Data);
148 // Get an aligned object and shift the alignment. 175 // Get an aligned object and shift the alignment.
149 mojo::internal::FixedBuffer aligned_buf(size + 1); 176 mojo::internal::FixedBuffer aligned_buf(size + 1);
150 void* raw_buf = aligned_buf.Leak(); 177 void* raw_buf = aligned_buf.Leak();
151 char* buf = reinterpret_cast<char*>(raw_buf) + 1; 178 char* buf = reinterpret_cast<char*>(raw_buf) + 1;
152 179
153 internal::PodUnion_Data* data = 180 internal::PodUnion_Data* data =
154 reinterpret_cast<internal::PodUnion_Data*>(buf); 181 reinterpret_cast<internal::PodUnion_Data*>(buf);
155 mojo::internal::BoundsChecker bounds_checker(data, 182 mojo::internal::BoundsChecker bounds_checker(data,
156 static_cast<uint32_t>(size), 0); 183 static_cast<uint32_t>(size), 0);
157 EXPECT_FALSE(internal::PodUnion_Data::Validate(buf, &bounds_checker)); 184 EXPECT_FALSE(internal::PodUnion_Data::Validate(buf, &bounds_checker, false));
158 free(raw_buf); 185 free(raw_buf);
159 } 186 }
160 187
161 TEST(UnionTest, OOBValidation) { 188 TEST(UnionTest, OOBValidation) {
162 Environment environment; 189 Environment environment;
163 size_t size = sizeof(internal::PodUnion_Data) - 1; 190 size_t size = sizeof(internal::PodUnion_Data) - 1;
164 mojo::internal::FixedBuffer buf(size); 191 mojo::internal::FixedBuffer buf(size);
165 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); 192 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf);
166 mojo::internal::BoundsChecker bounds_checker(data, 193 mojo::internal::BoundsChecker bounds_checker(data,
167 static_cast<uint32_t>(size), 0); 194 static_cast<uint32_t>(size), 0);
168 void* raw_buf = buf.Leak(); 195 void* raw_buf = buf.Leak();
169 EXPECT_FALSE(internal::PodUnion_Data::Validate(raw_buf, &bounds_checker)); 196 EXPECT_FALSE(
197 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, false));
170 free(raw_buf); 198 free(raw_buf);
171 } 199 }
172 200
173 TEST(UnionTest, UnknownTagValidation) { 201 TEST(UnionTest, UnknownTagValidation) {
174 Environment environment; 202 Environment environment;
175 size_t size = sizeof(internal::PodUnion_Data); 203 size_t size = sizeof(internal::PodUnion_Data);
176 mojo::internal::FixedBuffer buf(size); 204 mojo::internal::FixedBuffer buf(size);
177 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); 205 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf);
178 data->tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(0xFFFFFF); 206 data->tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(0xFFFFFF);
179 mojo::internal::BoundsChecker bounds_checker(data, 207 mojo::internal::BoundsChecker bounds_checker(data,
180 static_cast<uint32_t>(size), 0); 208 static_cast<uint32_t>(size), 0);
181 void* raw_buf = buf.Leak(); 209 void* raw_buf = buf.Leak();
182 EXPECT_FALSE(internal::PodUnion_Data::Validate(raw_buf, &bounds_checker)); 210 EXPECT_FALSE(
211 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, false));
183 free(raw_buf); 212 free(raw_buf);
184 } 213 }
185 214
186 TEST(UnionTest, StringGetterSetter) { 215 TEST(UnionTest, StringGetterSetter) {
187 ObjectUnionPtr pod(ObjectUnion::New()); 216 ObjectUnionPtr pod(ObjectUnion::New());
188 217
189 String hello("hello world"); 218 String hello("hello world");
190 pod->set_f_string(hello); 219 pod->set_f_string(hello);
191 EXPECT_EQ(hello, pod->get_f_string()); 220 EXPECT_EQ(hello, pod->get_f_string());
192 EXPECT_TRUE(pod->is_f_string()); 221 EXPECT_TRUE(pod->is_f_string());
(...skipping 24 matching lines...) Expand all
217 } 246 }
218 247
219 TEST(UnionTest, StringSerialization) { 248 TEST(UnionTest, StringSerialization) {
220 ObjectUnionPtr pod1(ObjectUnion::New()); 249 ObjectUnionPtr pod1(ObjectUnion::New());
221 250
222 String hello("hello world"); 251 String hello("hello world");
223 pod1->set_f_string(hello); 252 pod1->set_f_string(hello);
224 253
225 size_t size = GetSerializedSize_(pod1); 254 size_t size = GetSerializedSize_(pod1);
226 mojo::internal::FixedBuffer buf(size); 255 mojo::internal::FixedBuffer buf(size);
227 internal::ObjectUnion_Data* data; 256 internal::ObjectUnion_Data* data = nullptr;
228 Serialize_(pod1.Pass(), &buf, &data); 257 SerializeUnion_(pod1.Pass(), &buf, &data, false);
229 258
230 ObjectUnionPtr pod2; 259 ObjectUnionPtr pod2;
231 Deserialize_(data, &pod2); 260 Deserialize_(data, &pod2);
232 EXPECT_EQ(hello, pod2->get_f_string()); 261 EXPECT_EQ(hello, pod2->get_f_string());
233 EXPECT_TRUE(pod2->is_f_string()); 262 EXPECT_TRUE(pod2->is_f_string());
234 EXPECT_EQ(pod2->which(), ObjectUnion::Tag::F_STRING); 263 EXPECT_EQ(pod2->which(), ObjectUnion::Tag::F_STRING);
235 } 264 }
236 265
237 TEST(UnionTest, StringValidationNull) { 266 TEST(UnionTest, NullStringValidation) {
238 Environment environment; 267 Environment environment;
239 size_t size = sizeof(internal::ObjectUnion_Data); 268 size_t size = sizeof(internal::ObjectUnion_Data);
240 mojo::internal::FixedBuffer buf(size); 269 mojo::internal::FixedBuffer buf(size);
241 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 270 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
242 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 271 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
243 data->data.unknown = 0x0; 272 data->data.unknown = 0x0;
244 mojo::internal::BoundsChecker bounds_checker(data, 273 mojo::internal::BoundsChecker bounds_checker(data,
245 static_cast<uint32_t>(size), 0); 274 static_cast<uint32_t>(size), 0);
246 void* raw_buf = buf.Leak(); 275 void* raw_buf = buf.Leak();
247 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker)); 276 EXPECT_FALSE(
277 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
248 free(raw_buf); 278 free(raw_buf);
249 } 279 }
250 280
251 TEST(UnionTest, StringValidationPointerOverflow) { 281 TEST(UnionTest, StringPointerOverflowValidation) {
252 Environment environment; 282 Environment environment;
253 size_t size = sizeof(internal::ObjectUnion_Data); 283 size_t size = sizeof(internal::ObjectUnion_Data);
254 mojo::internal::FixedBuffer buf(size); 284 mojo::internal::FixedBuffer buf(size);
255 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 285 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
256 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 286 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
257 data->data.unknown = 0xFFFFFFFFFFFFFFFF; 287 data->data.unknown = 0xFFFFFFFFFFFFFFFF;
258 mojo::internal::BoundsChecker bounds_checker(data, 288 mojo::internal::BoundsChecker bounds_checker(data,
259 static_cast<uint32_t>(size), 0); 289 static_cast<uint32_t>(size), 0);
260 void* raw_buf = buf.Leak(); 290 void* raw_buf = buf.Leak();
261 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker)); 291 EXPECT_FALSE(
292 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
262 free(raw_buf); 293 free(raw_buf);
263 } 294 }
264 295
265 TEST(UnionTest, StringValidationValidateString) { 296 TEST(UnionTest, StringValidateOOB) {
266 Environment environment; 297 Environment environment;
267 size_t size = 32; 298 size_t size = 32;
268 mojo::internal::FixedBuffer buf(size); 299 mojo::internal::FixedBuffer buf(size);
269 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 300 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
270 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 301 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
271 302
272 data->data.f_f_string = 8; 303 data->data.f_f_string = 8;
273 char* ptr = reinterpret_cast<char*>(&data->data.f_f_string); 304 char* ptr = reinterpret_cast<char*>(&data->data.f_f_string);
274 mojo::internal::ArrayHeader* array_header = 305 mojo::internal::ArrayHeader* array_header =
275 reinterpret_cast<mojo::internal::ArrayHeader*>(ptr + *ptr); 306 reinterpret_cast<mojo::internal::ArrayHeader*>(ptr + *ptr);
276 array_header->num_bytes = 20; // This should go out of bounds. 307 array_header->num_bytes = 20; // This should go out of bounds.
277 array_header->num_elements = 20; 308 array_header->num_elements = 20;
278 mojo::internal::BoundsChecker bounds_checker(data, 32, 0); 309 mojo::internal::BoundsChecker bounds_checker(data, 32, 0);
279 void* raw_buf = buf.Leak(); 310 void* raw_buf = buf.Leak();
280 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker)); 311 EXPECT_FALSE(
312 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
281 free(raw_buf); 313 free(raw_buf);
282 } 314 }
315
316 TEST(UnionTest, PodUnionInStructClone) {
317 SmallStructPtr small_struct(SmallStruct::New());
318 small_struct->pod_union = PodUnion::New();
319 small_struct->pod_union->set_f_int8(10);
320
321 SmallStructPtr clone = small_struct.Clone();
322 EXPECT_EQ(10, clone->pod_union->get_f_int8());
323 }
324
325 TEST(UnionTest, PodUnionInStructSerialization) {
326 Environment environment;
327 SmallStructPtr small_struct(SmallStruct::New());
328 small_struct->pod_union = PodUnion::New();
329 small_struct->pod_union->set_f_int32(10);
330
331 size_t size = GetSerializedSize_(small_struct);
332
333 mojo::internal::FixedBuffer buf(size);
334 internal::SmallStruct_Data* data = nullptr;
335 Serialize_(small_struct.Pass(), &buf, &data);
336
337 SmallStructPtr deserialized;
338 Deserialize_(data, &deserialized);
339
340 EXPECT_EQ(10, deserialized->pod_union->get_f_int32());
341 }
342
343 TEST(UnionTest, ObjectUnionInStructSerialization) {
344 Environment environment;
345 SmallObjStructPtr obj_struct(SmallObjStruct::New());
346 obj_struct->obj_union = ObjectUnion::New();
347 String hello("hello world");
348 obj_struct->obj_union->set_f_string(hello);
349
350 size_t size = GetSerializedSize_(obj_struct);
351
352 mojo::internal::FixedBuffer buf(size);
353 internal::SmallObjStruct_Data* data = nullptr;
354 Serialize_(obj_struct.Pass(), &buf, &data);
355
356 SmallObjStructPtr deserialized;
357 Deserialize_(data, &deserialized);
358
359 EXPECT_EQ(hello, deserialized->obj_union->get_f_string());
360 }
361
362 TEST(UnionTest, UnionsInStructsValidation) {
363 Environment environment;
364 SmallStructPtr small_struct(SmallStruct::New());
365 small_struct->pod_union = PodUnion::New();
366 small_struct->pod_union->set_f_int32(10);
367
368 size_t size = GetSerializedSize_(small_struct);
369
370 mojo::internal::FixedBuffer buf(size);
371 internal::SmallStruct_Data* data = nullptr;
372 Serialize_(small_struct.Pass(), &buf, &data);
373
374 void* raw_buf = buf.Leak();
375 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
376 EXPECT_TRUE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker));
377 free(raw_buf);
378 }
379
380 TEST(UnionTest, PodUnionInStructValidationFailure) {
381 Environment environment;
382 SmallStructPtr small_struct(SmallStruct::New());
383 small_struct->pod_union = PodUnion::New();
384 small_struct->pod_union->set_f_int32(10);
385
386 size_t size = GetSerializedSize_(small_struct);
387
388 mojo::internal::FixedBuffer buf(size);
389 internal::SmallStruct_Data* data = nullptr;
390 Serialize_(small_struct.Pass(), &buf, &data);
391 data->pod_union.tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(100);
392
393 void* raw_buf = buf.Leak();
394 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
395 EXPECT_FALSE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker));
396 free(raw_buf);
397 }
398
399 TEST(UnionTest, NullUnionValidationFailure) {
400 Environment environment;
401 SmallStructNonNullableUnionPtr small_struct(
402 SmallStructNonNullableUnion::New());
403
404 size_t size = GetSerializedSize_(small_struct);
405
406 mojo::internal::FixedBuffer buf(size);
407 internal::SmallStructNonNullableUnion_Data* data =
408 internal::SmallStructNonNullableUnion_Data::New(&buf);
409
410 void* raw_buf = buf.Leak();
411 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
412 EXPECT_FALSE(internal::SmallStructNonNullableUnion_Data::Validate(
413 raw_buf, &bounds_checker));
414 free(raw_buf);
415 }
416
417 TEST(UnionTest, NullableUnionValidation) {
418 Environment environment;
419 SmallStructPtr small_struct(SmallStruct::New());
420
421 size_t size = GetSerializedSize_(small_struct);
422
423 mojo::internal::FixedBuffer buf(size);
424 internal::SmallStruct_Data* data = nullptr;
425 Serialize_(small_struct.Pass(), &buf, &data);
426
427 void* raw_buf = buf.Leak();
428 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
429 EXPECT_TRUE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker));
430 free(raw_buf);
431 }
432
433 TEST(UnionTest, PodUnionInArray) {
viettrungluu 2015/03/04 20:58:13 Probably for consistency, tests of arrays of union
azani 2015/03/05 23:59:25 Done.
434 SmallStructPtr small_struct(SmallStruct::New());
435 small_struct->pod_union_array = Array<PodUnionPtr>(2);
436 small_struct->pod_union_array[0] = PodUnion::New();
437 small_struct->pod_union_array[1] = PodUnion::New();
438
439 small_struct->pod_union_array[0]->set_f_int8(10);
440 small_struct->pod_union_array[1]->set_f_int16(12);
441
442 EXPECT_EQ(10, small_struct->pod_union_array[0]->get_f_int8());
443 EXPECT_EQ(12, small_struct->pod_union_array[1]->get_f_int16());
444 }
445
446 TEST(UnionTest, PodUnionInArraySerialization) {
447 Environment environment;
448
449 Array<PodUnionPtr> array(2);
450 array[0] = PodUnion::New();
451 array[1] = PodUnion::New();
452
453 array[0]->set_f_int8(10);
454 array[1]->set_f_int16(12);
455 EXPECT_EQ(2U, array.size());
456
457 size_t size = GetSerializedSize_(array);
458 EXPECT_EQ(40U, size);
459
460 mojo::internal::FixedBuffer buf(size);
461 mojo::internal::Array_Data<internal::PodUnion_Data>* data;
462 SerializeArray_<mojo::internal::ArrayValidateParams<
463 0, false, mojo::internal::NoValidateParams>>(array.Pass(), &buf, &data);
464
465 Array<PodUnionPtr> array2;
466 Deserialize_(data, &array2);
467
468 EXPECT_EQ(2U, array2.size());
469
470 EXPECT_EQ(10, array2[0]->get_f_int8());
471 EXPECT_EQ(12, array2[1]->get_f_int16());
472 }
473
474 TEST(UnionTest, PodUnionInArraySerializationWithNull) {
475 Environment environment;
476
477 Array<PodUnionPtr> array(2);
478 array[0] = PodUnion::New();
479
480 array[0]->set_f_int8(10);
481 EXPECT_EQ(2U, array.size());
482
483 size_t size = GetSerializedSize_(array);
484 EXPECT_EQ(40U, size);
485
486 mojo::internal::FixedBuffer buf(size);
487 mojo::internal::Array_Data<internal::PodUnion_Data>* data;
488 SerializeArray_<mojo::internal::ArrayValidateParams<
489 0, true, mojo::internal::NoValidateParams>>(array.Pass(), &buf, &data);
490
491 Array<PodUnionPtr> array2;
492 Deserialize_(data, &array2);
493
494 EXPECT_EQ(2U, array2.size());
495
496 EXPECT_EQ(10, array2[0]->get_f_int8());
497 EXPECT_TRUE(array2[1].is_null());
498 }
499
283 } // namespace test 500 } // namespace test
284 } // namespace mojo 501 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698