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

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, 10 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 Serialize_(pod1.Pass(), &buf, &data);
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 Serialize_(pod.Pass(), &buf, &data);
132 void* raw_buf = buf.Leak(); 134 void* raw_buf = buf.Leak();
133 mojo::internal::BoundsChecker bounds_checker(data, size, 0); 135 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
134 EXPECT_TRUE(internal::PodUnion_Data::Validate(raw_buf, &bounds_checker)); 136 EXPECT_TRUE(
137 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, false));
135 free(raw_buf); 138 free(raw_buf);
136 } 139 }
137 140
141 TEST(UnionTest, SerializeNotNull) {
142 PodUnionPtr pod(PodUnion::New());
143 pod->set_f_int8(0);
144 size_t size = GetSerializedSize_(pod);
145 mojo::internal::FixedBuffer buf(size);
146 internal::PodUnion_Data* data = nullptr;
147 Serialize_(pod.Pass(), &buf, &data);
148 EXPECT_FALSE(data->is_null());
149 }
150
151 TEST(UnionTest, SerializeIsNull) {
152 PodUnionPtr pod;
153 size_t size = GetSerializedSize_(pod);
154 EXPECT_EQ(16U, size);
155 mojo::internal::FixedBuffer buf(size);
156 internal::PodUnion_Data* data = nullptr;
157 Serialize_(pod.Pass(), &buf, &data);
158 EXPECT_TRUE(data->is_null());
159
160 PodUnionPtr pod2;
161 Deserialize_(data, &pod2);
162 EXPECT_TRUE(pod2.is_null());
163 }
164
138 TEST(UnionTest, NullValidation) { 165 TEST(UnionTest, NullValidation) {
139 void* buf = nullptr; 166 void* buf = nullptr;
140 mojo::internal::BoundsChecker bounds_checker(buf, 0, 0); 167 mojo::internal::BoundsChecker bounds_checker(buf, 0, 0);
141 EXPECT_TRUE(internal::PodUnion_Data::Validate(buf, &bounds_checker)); 168 EXPECT_TRUE(internal::PodUnion_Data::Validate(buf, &bounds_checker, false));
142 } 169 }
143 170
144 TEST(UnionTest, OutOfAlignmentValidation) { 171 TEST(UnionTest, OutOfAlignmentValidation) {
145 Environment environment; 172 Environment environment;
146 size_t size = sizeof(internal::PodUnion_Data); 173 size_t size = sizeof(internal::PodUnion_Data);
147 // Get an aligned object and shift the alignment. 174 // Get an aligned object and shift the alignment.
148 mojo::internal::FixedBuffer aligned_buf(size + 1); 175 mojo::internal::FixedBuffer aligned_buf(size + 1);
149 void* raw_buf = aligned_buf.Leak(); 176 void* raw_buf = aligned_buf.Leak();
150 char* buf = reinterpret_cast<char*>(raw_buf) + 1; 177 char* buf = reinterpret_cast<char*>(raw_buf) + 1;
151 178
152 internal::PodUnion_Data* data = 179 internal::PodUnion_Data* data =
153 reinterpret_cast<internal::PodUnion_Data*>(buf); 180 reinterpret_cast<internal::PodUnion_Data*>(buf);
154 mojo::internal::BoundsChecker bounds_checker(data, size, 0); 181 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
155 EXPECT_FALSE(internal::PodUnion_Data::Validate(buf, &bounds_checker)); 182 EXPECT_FALSE(internal::PodUnion_Data::Validate(buf, &bounds_checker, false));
156 free(raw_buf); 183 free(raw_buf);
157 } 184 }
158 185
159 TEST(UnionTest, OOBValidation) { 186 TEST(UnionTest, OOBValidation) {
160 Environment environment; 187 Environment environment;
161 size_t size = sizeof(internal::PodUnion_Data) - 1; 188 size_t size = sizeof(internal::PodUnion_Data) - 1;
162 mojo::internal::FixedBuffer buf(size); 189 mojo::internal::FixedBuffer buf(size);
163 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); 190 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf);
164 mojo::internal::BoundsChecker bounds_checker(data, size, 0); 191 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
165 void* raw_buf = buf.Leak(); 192 void* raw_buf = buf.Leak();
166 EXPECT_FALSE(internal::PodUnion_Data::Validate(raw_buf, &bounds_checker)); 193 EXPECT_FALSE(
194 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, false));
167 free(raw_buf); 195 free(raw_buf);
168 } 196 }
169 197
170 TEST(UnionTest, UnknownTagValidation) { 198 TEST(UnionTest, UnknownTagValidation) {
171 Environment environment; 199 Environment environment;
172 size_t size = sizeof(internal::PodUnion_Data); 200 size_t size = sizeof(internal::PodUnion_Data);
173 mojo::internal::FixedBuffer buf(size); 201 mojo::internal::FixedBuffer buf(size);
174 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); 202 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf);
175 data->tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(0xFFFFFF); 203 data->tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(0xFFFFFF);
176 mojo::internal::BoundsChecker bounds_checker(data, size, 0); 204 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
177 void* raw_buf = buf.Leak(); 205 void* raw_buf = buf.Leak();
178 EXPECT_FALSE(internal::PodUnion_Data::Validate(raw_buf, &bounds_checker)); 206 EXPECT_FALSE(
207 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, false));
179 free(raw_buf); 208 free(raw_buf);
180 } 209 }
181 210
182 TEST(UnionTest, StringGetterSetter) { 211 TEST(UnionTest, StringGetterSetter) {
183 ObjectUnionPtr pod(ObjectUnion::New()); 212 ObjectUnionPtr pod(ObjectUnion::New());
184 213
185 String hello("hello world"); 214 String hello("hello world");
186 pod->set_f_string(hello); 215 pod->set_f_string(hello);
187 EXPECT_EQ(hello, pod->get_f_string()); 216 EXPECT_EQ(hello, pod->get_f_string());
188 EXPECT_TRUE(pod->is_f_string()); 217 EXPECT_TRUE(pod->is_f_string());
(...skipping 24 matching lines...) Expand all
213 } 242 }
214 243
215 TEST(UnionTest, StringSerialization) { 244 TEST(UnionTest, StringSerialization) {
216 ObjectUnionPtr pod1(ObjectUnion::New()); 245 ObjectUnionPtr pod1(ObjectUnion::New());
217 246
218 String hello("hello world"); 247 String hello("hello world");
219 pod1->set_f_string(hello); 248 pod1->set_f_string(hello);
220 249
221 size_t size = GetSerializedSize_(pod1); 250 size_t size = GetSerializedSize_(pod1);
222 mojo::internal::FixedBuffer buf(size); 251 mojo::internal::FixedBuffer buf(size);
223 internal::ObjectUnion_Data* data; 252 internal::ObjectUnion_Data* data = nullptr;
224 Serialize_(pod1.Pass(), &buf, &data); 253 Serialize_(pod1.Pass(), &buf, &data);
225 254
226 ObjectUnionPtr pod2; 255 ObjectUnionPtr pod2;
227 Deserialize_(data, &pod2); 256 Deserialize_(data, &pod2);
228 EXPECT_EQ(hello, pod2->get_f_string()); 257 EXPECT_EQ(hello, pod2->get_f_string());
229 EXPECT_TRUE(pod2->is_f_string()); 258 EXPECT_TRUE(pod2->is_f_string());
230 EXPECT_EQ(pod2->which(), ObjectUnion::Tag::F_STRING); 259 EXPECT_EQ(pod2->which(), ObjectUnion::Tag::F_STRING);
231 } 260 }
232 261
233 TEST(UnionTest, StringValidationNull) { 262 TEST(UnionTest, NullStringValidation) {
234 Environment environment; 263 Environment environment;
235 size_t size = sizeof(internal::ObjectUnion_Data); 264 size_t size = sizeof(internal::ObjectUnion_Data);
236 mojo::internal::FixedBuffer buf(size); 265 mojo::internal::FixedBuffer buf(size);
237 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 266 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
238 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 267 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
239 data->data.unknown = 0x0; 268 data->data.unknown = 0x0;
240 mojo::internal::BoundsChecker bounds_checker(data, size, 0); 269 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
241 void* raw_buf = buf.Leak(); 270 void* raw_buf = buf.Leak();
242 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker)); 271 EXPECT_FALSE(
272 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
243 free(raw_buf); 273 free(raw_buf);
244 } 274 }
245 275
246 TEST(UnionTest, StringValidationPointerOverflow) { 276 TEST(UnionTest, StringPointerOverflowValidation) {
247 Environment environment; 277 Environment environment;
248 size_t size = sizeof(internal::ObjectUnion_Data); 278 size_t size = sizeof(internal::ObjectUnion_Data);
249 mojo::internal::FixedBuffer buf(size); 279 mojo::internal::FixedBuffer buf(size);
250 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 280 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
251 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 281 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
252 data->data.unknown = 0xFFFFFFFFFFFFFFFF; 282 data->data.unknown = 0xFFFFFFFFFFFFFFFF;
253 mojo::internal::BoundsChecker bounds_checker(data, size, 0); 283 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
254 void* raw_buf = buf.Leak(); 284 void* raw_buf = buf.Leak();
255 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker)); 285 EXPECT_FALSE(
286 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
256 free(raw_buf); 287 free(raw_buf);
257 } 288 }
258 289
259 TEST(UnionTest, StringValidationValidateString) { 290 TEST(UnionTest, StringValidateStringValidation) {
yzshen1 2015/02/25 21:07:00 nit: I cannot parse this test name...
azani 2015/03/03 00:44:15 Done.
260 Environment environment; 291 Environment environment;
261 size_t size = 32; 292 size_t size = 32;
262 mojo::internal::FixedBuffer buf(size); 293 mojo::internal::FixedBuffer buf(size);
263 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 294 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
264 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 295 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
265 296
266 data->data.f_f_string = 8; 297 data->data.f_f_string = 8;
267 char* ptr = reinterpret_cast<char*>(&data->data.f_f_string); 298 char* ptr = reinterpret_cast<char*>(&data->data.f_f_string);
268 mojo::internal::ArrayHeader* array_header = 299 mojo::internal::ArrayHeader* array_header =
269 reinterpret_cast<mojo::internal::ArrayHeader*>(ptr + *ptr); 300 reinterpret_cast<mojo::internal::ArrayHeader*>(ptr + *ptr);
270 array_header->num_bytes = 20; // This should go out of bounds. 301 array_header->num_bytes = 20; // This should go out of bounds.
271 array_header->num_elements = 20; 302 array_header->num_elements = 20;
272 mojo::internal::BoundsChecker bounds_checker(data, 32, 0); 303 mojo::internal::BoundsChecker bounds_checker(data, 32, 0);
273 void* raw_buf = buf.Leak(); 304 void* raw_buf = buf.Leak();
274 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker)); 305 EXPECT_FALSE(
275 free(raw_buf); 306 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false));
276 } 307 free(raw_buf);
308 }
309
310 TEST(UnionTest, PodUnionInStructClone) {
311 SmallStructPtr small_struct(SmallStruct::New());
312 small_struct->pod_union = PodUnion::New();
313 small_struct->pod_union->set_f_int8(10);
314
315 SmallStructPtr clone = small_struct.Clone();
316 EXPECT_EQ(10, clone->pod_union->get_f_int8());
317 }
318
319 TEST(UnionTest, PodUnionInStructSerialization) {
320 SmallStructPtr small_struct(SmallStruct::New());
321 small_struct->pod_union = PodUnion::New();
322 small_struct->pod_union->set_f_int32(10);
323
324 size_t size = GetSerializedSize_(small_struct);
325
326 mojo::internal::FixedBuffer buf(size);
327 internal::SmallStruct_Data* data = nullptr;
328 Serialize_(small_struct.Pass(), &buf, &data);
329
330 SmallStructPtr deserialized;
331 Deserialize_(data, &deserialized);
332
333 EXPECT_EQ(10, deserialized->pod_union->get_f_int32());
334 }
335
336 TEST(UnionTest, ObjectUnionInStructSerialization) {
337 SmallObjStructPtr obj_struct(SmallObjStruct::New());
338 obj_struct->obj_union = ObjectUnion::New();
339 String hello("hello world");
340 obj_struct->obj_union->set_f_string(hello);
341
342 size_t size = GetSerializedSize_(obj_struct);
343
344 mojo::internal::FixedBuffer buf(size);
345 internal::SmallObjStruct_Data* data = nullptr;
346 Serialize_(obj_struct.Pass(), &buf, &data);
347
348 SmallObjStructPtr deserialized;
349 Deserialize_(data, &deserialized);
350
351 EXPECT_EQ(hello, deserialized->obj_union->get_f_string());
352 }
353
354 TEST(UnionTest, UnionsInStructsValidation) {
355 SmallStructPtr small_struct(SmallStruct::New());
356 small_struct->pod_union = PodUnion::New();
357 small_struct->pod_union->set_f_int32(10);
358
359 size_t size = GetSerializedSize_(small_struct);
360
361 mojo::internal::FixedBuffer buf(size);
362 internal::SmallStruct_Data* data = nullptr;
363 Serialize_(small_struct.Pass(), &buf, &data);
364
365 void* raw_buf = buf.Leak();
366 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
367 EXPECT_TRUE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker));
368 free(raw_buf);
369 }
370
371 TEST(UnionTest, PodUnionInStructValidationFailure) {
372 Environment environment;
373 SmallStructPtr small_struct(SmallStruct::New());
374 small_struct->pod_union = PodUnion::New();
375 small_struct->pod_union->set_f_int32(10);
376
377 size_t size = GetSerializedSize_(small_struct);
378
379 mojo::internal::FixedBuffer buf(size);
380 internal::SmallStruct_Data* data = nullptr;
381 Serialize_(small_struct.Pass(), &buf, &data);
382 data->pod_union.tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(100);
383
384 void* raw_buf = buf.Leak();
385 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
386 EXPECT_FALSE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker));
387 free(raw_buf);
388 }
389
390 TEST(UnionTest, NullUnionValidationFailure) {
391 Environment environment;
392 SmallStructPtr small_struct(SmallStruct::New());
393
394 size_t size = GetSerializedSize_(small_struct);
395
396 mojo::internal::FixedBuffer buf(size);
397 internal::SmallStruct_Data* data = nullptr;
398 Serialize_(small_struct.Pass(), &buf, &data);
399
400 void* raw_buf = buf.Leak();
401 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
402 EXPECT_FALSE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker));
403 free(raw_buf);
404 }
405
406 TEST(UnionTest, NullableUnionValidation) {
407 Environment environment;
408 SmallStructNullableUnionPtr small_struct(SmallStructNullableUnion::New());
409
410 size_t size = GetSerializedSize_(small_struct);
411
412 mojo::internal::FixedBuffer buf(size);
413 internal::SmallStructNullableUnion_Data* data = nullptr;
414 Serialize_(small_struct.Pass(), &buf, &data);
415
416 void* raw_buf = buf.Leak();
417 mojo::internal::BoundsChecker bounds_checker(data, size, 0);
418 EXPECT_TRUE(internal::SmallStructNullableUnion_Data::Validate(
419 raw_buf, &bounds_checker));
420 free(raw_buf);
421 }
422
423 TEST(UnionTest, PodUnionInArray) {
424 SmallStructPtr small_struct(SmallStruct::New());
425 small_struct->pod_union_array = Array<PodUnionPtr>(2);
426 small_struct->pod_union_array[0] = PodUnion::New();
427 small_struct->pod_union_array[1] = PodUnion::New();
428
429 small_struct->pod_union_array[0]->set_f_int8(10);
430 small_struct->pod_union_array[1]->set_f_int16(12);
431
432 EXPECT_EQ(10, small_struct->pod_union_array[0]->get_f_int8());
433 EXPECT_EQ(12, small_struct->pod_union_array[1]->get_f_int16());
434 }
435
436 TEST(UnionTest, PodUnionInArraySerialization) {
437 Environment environment;
438
439 Array<PodUnionPtr> array(2);
440 array[0] = PodUnion::New();
441 array[1] = PodUnion::New();
442
443 array[0]->set_f_int8(10);
444 array[1]->set_f_int16(12);
445 EXPECT_EQ(2U, array.size());
446
447 size_t size = GetSerializedSize_(array);
448 EXPECT_EQ(40U, size);
449
450 mojo::internal::FixedBuffer buf(size);
451 mojo::internal::Array_Data<internal::PodUnion_Data>* data;
452 SerializeArray_<mojo::internal::ArrayValidateParams<
453 0, false, mojo::internal::NoValidateParams>>(array.Pass(), &buf, &data);
454
455 Array<PodUnionPtr> array2;
456 Deserialize_(data, &array2);
457
458 EXPECT_EQ(2U, array2.size());
459
460 EXPECT_EQ(10, array2[0]->get_f_int8());
461 EXPECT_EQ(12, array2[1]->get_f_int16());
462 }
463
464 TEST(UnionTest, PodUnionInArraySerializationWithNull) {
465 Environment environment;
466
467 Array<PodUnionPtr> array(2);
468 array[0] = PodUnion::New();
469
470 array[0]->set_f_int8(10);
471 EXPECT_EQ(2U, array.size());
472
473 size_t size = GetSerializedSize_(array);
474 EXPECT_EQ(40U, size);
475
476 mojo::internal::FixedBuffer buf(size);
477 mojo::internal::Array_Data<internal::PodUnion_Data>* data;
478 SerializeArray_<mojo::internal::ArrayValidateParams<
479 0, false, mojo::internal::NoValidateParams>>(array.Pass(), &buf, &data);
yzshen1 2015/02/25 21:07:00 false -> true, meaning that elements are nullable.
azani 2015/03/03 00:44:15 Done.
480
481 Array<PodUnionPtr> array2;
482 Deserialize_(data, &array2);
483
484 EXPECT_EQ(2U, array2.size());
485
486 EXPECT_EQ(10, array2[0]->get_f_int8());
487 EXPECT_TRUE(array2[1].is_null());
488 }
489
490 /*
yzshen1 2015/02/25 21:07:00 Please remove any code if it is not needed. (Or ma
491 TEST(UnionTest, PodUnionInArrayInStruct) {
492 Environment environment;
493 SmallStructPtr small_struct(SmallStruct::New());
494
495 small_struct->pod_union_array = Array<PodUnionPtr>(2);
496 small_struct->pod_union_array[0] = PodUnion::New();
497 small_struct->pod_union_array[1] = PodUnion::New();
498
499 small_struct->pod_union_array[0]->set_f_int8(10);
500 small_struct->pod_union_array[1]->set_f_int16(12);
501
502 size_t size = GetSerializedSize_(small_struct);
503 EXPECT_EQ(88U, size);
504
505 mojo::internal::FixedBuffer buf(size);
506 internal::SmallStruct_Data* data = nullptr;
507 Serialize_(small_struct.Pass(), &buf, &data);
508
509 SmallStructPtr deserialized;
510 Deserialize_(data, &deserialized);
511
512 EXPECT_EQ(10, deserialized->pod_union_array[0]->get_f_int8());
513 EXPECT_EQ(12, deserialized->pod_union_array[1]->get_f_int16());
514 }
515 */
516
277 } // namespace test 517 } // namespace test
278 } // namespace mojo 518 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698