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

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

Issue 2689513003: Add field-initializing constructors to generated mojo structs. (Closed)
Patch Set: rebase Created 3 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 #include <string.h> 7 #include <string.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" 10 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
11 #include "mojo/public/cpp/system/message_pipe.h" 11 #include "mojo/public/cpp/system/message_pipe.h"
12 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" 12 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h"
13 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 14
15 namespace mojo { 15 namespace mojo {
16 namespace test { 16 namespace test {
17 namespace { 17 namespace {
18 18
19 RectPtr MakeRect(int32_t factor = 1) { 19 RectPtr MakeRect(int32_t factor = 1) {
20 RectPtr rect(Rect::New()); 20 return Rect::New(1 * factor, 2 * factor, 10 * factor, 20 * factor);
21 rect->x = 1 * factor;
22 rect->y = 2 * factor;
23 rect->width = 10 * factor;
24 rect->height = 20 * factor;
25 return rect;
26 } 21 }
27 22
28 void CheckRect(const Rect& rect, int32_t factor = 1) { 23 void CheckRect(const Rect& rect, int32_t factor = 1) {
29 EXPECT_EQ(1 * factor, rect.x); 24 EXPECT_EQ(1 * factor, rect.x);
30 EXPECT_EQ(2 * factor, rect.y); 25 EXPECT_EQ(2 * factor, rect.y);
31 EXPECT_EQ(10 * factor, rect.width); 26 EXPECT_EQ(10 * factor, rect.width);
32 EXPECT_EQ(20 * factor, rect.height); 27 EXPECT_EQ(20 * factor, rect.height);
33 } 28 }
34 29
35 MultiVersionStructPtr MakeMultiVersionStruct() { 30 MultiVersionStructPtr MakeMultiVersionStruct() {
36 MultiVersionStructPtr output(MultiVersionStruct::New());
37 output->f_int32 = 123;
38 output->f_rect = MakeRect(5);
39 output->f_string.emplace("hello");
40 output->f_array.emplace(3);
41 (*output->f_array)[0] = 10;
42 (*output->f_array)[1] = 9;
43 (*output->f_array)[2] = 8;
44 MessagePipe pipe; 31 MessagePipe pipe;
45 output->f_message_pipe = std::move(pipe.handle0); 32 return MultiVersionStruct::New(123, MakeRect(5), std::string("hello"),
46 output->f_int16 = 42; 33 std::vector<int8_t>{10, 9, 8},
47 34 std::move(pipe.handle0), false, 42);
48 return output;
49 } 35 }
50 36
51 template <typename U, typename T> 37 template <typename U, typename T>
52 U SerializeAndDeserialize(T input) { 38 U SerializeAndDeserialize(T input) {
53 using InputMojomType = typename T::Struct::DataView; 39 using InputMojomType = typename T::Struct::DataView;
54 using OutputMojomType = typename U::Struct::DataView; 40 using OutputMojomType = typename U::Struct::DataView;
55 41
56 using InputDataType = 42 using InputDataType =
57 typename mojo::internal::MojomTypeTraits<InputMojomType>::Data*; 43 typename mojo::internal::MojomTypeTraits<InputMojomType>::Data*;
58 using OutputDataType = 44 using OutputDataType =
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 EXPECT_FALSE(pair.is_null()); 145 EXPECT_FALSE(pair.is_null());
160 EXPECT_TRUE(pair->first.is_null()); 146 EXPECT_TRUE(pair->first.is_null());
161 EXPECT_TRUE(pair->first.is_null()); 147 EXPECT_TRUE(pair->first.is_null());
162 148
163 pair = nullptr; 149 pair = nullptr;
164 EXPECT_TRUE(pair.is_null()); 150 EXPECT_TRUE(pair.is_null());
165 } 151 }
166 152
167 // Serialization test of a struct with struct pointers. 153 // Serialization test of a struct with struct pointers.
168 TEST_F(StructTest, Serialization_StructPointers) { 154 TEST_F(StructTest, Serialization_StructPointers) {
169 RectPairPtr pair(RectPair::New()); 155 RectPairPtr pair(RectPair::New(MakeRect(), MakeRect()));
170 pair->first = MakeRect();
171 pair->second = MakeRect();
172 156
173 size_t size = 157 size_t size =
174 mojo::internal::PrepareToSerialize<RectPairDataView>(pair, nullptr); 158 mojo::internal::PrepareToSerialize<RectPairDataView>(pair, nullptr);
175 EXPECT_EQ(8U + 16U + 2 * (8U + 16U), size); 159 EXPECT_EQ(8U + 16U + 2 * (8U + 16U), size);
176 160
177 mojo::internal::FixedBufferForTesting buf(size); 161 mojo::internal::FixedBufferForTesting buf(size);
178 internal::RectPair_Data* data; 162 internal::RectPair_Data* data;
179 mojo::internal::Serialize<RectPairDataView>(pair, &buf, &data, nullptr); 163 mojo::internal::Serialize<RectPairDataView>(pair, &buf, &data, nullptr);
180 164
181 RectPairPtr pair2; 165 RectPairPtr pair2;
182 mojo::internal::Deserialize<RectPairDataView>(data, &pair2, nullptr); 166 mojo::internal::Deserialize<RectPairDataView>(data, &pair2, nullptr);
183 167
184 CheckRect(*pair2->first); 168 CheckRect(*pair2->first);
185 CheckRect(*pair2->second); 169 CheckRect(*pair2->second);
186 } 170 }
187 171
188 // Serialization test of a struct with an array member. 172 // Serialization test of a struct with an array member.
189 TEST_F(StructTest, Serialization_ArrayPointers) { 173 TEST_F(StructTest, Serialization_ArrayPointers) {
190 NamedRegionPtr region(NamedRegion::New()); 174 std::vector<RectPtr> rects;
191 region->name.emplace("region"); 175 for (size_t i = 0; i < 4; ++i)
192 region->rects.emplace(4); 176 rects.push_back(MakeRect(static_cast<int32_t>(i) + 1));
193 for (size_t i = 0; i < region->rects->size(); ++i) 177
194 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); 178 NamedRegionPtr region(
179 NamedRegion::New(std::string("region"), std::move(rects)));
195 180
196 size_t size = 181 size_t size =
197 mojo::internal::PrepareToSerialize<NamedRegionDataView>(region, nullptr); 182 mojo::internal::PrepareToSerialize<NamedRegionDataView>(region, nullptr);
198 EXPECT_EQ(8U + // header 183 EXPECT_EQ(8U + // header
199 8U + // name pointer 184 8U + // name pointer
200 8U + // rects pointer 185 8U + // rects pointer
201 8U + // name header 186 8U + // name header
202 8U + // name payload (rounded up) 187 8U + // name payload (rounded up)
203 8U + // rects header 188 8U + // rects header
204 4 * 8U + // rects payload (four pointers) 189 4 * 8U + // rects payload (four pointers)
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 NamedRegionPtr region2; 225 NamedRegionPtr region2;
241 mojo::internal::Deserialize<NamedRegionDataView>(data, &region2, nullptr); 226 mojo::internal::Deserialize<NamedRegionDataView>(data, &region2, nullptr);
242 227
243 EXPECT_FALSE(region2->name); 228 EXPECT_FALSE(region2->name);
244 EXPECT_FALSE(region2->rects); 229 EXPECT_FALSE(region2->rects);
245 } 230 }
246 231
247 // Tests deserializing structs as a newer version. 232 // Tests deserializing structs as a newer version.
248 TEST_F(StructTest, Versioning_OldToNew) { 233 TEST_F(StructTest, Versioning_OldToNew) {
249 { 234 {
250 MultiVersionStructV0Ptr input(MultiVersionStructV0::New()); 235 MultiVersionStructV0Ptr input(MultiVersionStructV0::New(123));
251 input->f_int32 = 123; 236 MultiVersionStructPtr expected_output(MultiVersionStruct::New(123));
252 MultiVersionStructPtr expected_output(MultiVersionStruct::New());
253 expected_output->f_int32 = 123;
254 237
255 MultiVersionStructPtr output = 238 MultiVersionStructPtr output =
256 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); 239 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input));
257 EXPECT_TRUE(output); 240 EXPECT_TRUE(output);
258 EXPECT_TRUE(output->Equals(*expected_output)); 241 EXPECT_TRUE(output->Equals(*expected_output));
259 } 242 }
260 243
261 { 244 {
262 MultiVersionStructV1Ptr input(MultiVersionStructV1::New()); 245 MultiVersionStructV1Ptr input(MultiVersionStructV1::New(123, MakeRect(5)));
263 input->f_int32 = 123; 246 MultiVersionStructPtr expected_output(
264 input->f_rect = MakeRect(5); 247 MultiVersionStruct::New(123, MakeRect(5)));
265 MultiVersionStructPtr expected_output(MultiVersionStruct::New());
266 expected_output->f_int32 = 123;
267 expected_output->f_rect = MakeRect(5);
268 248
269 MultiVersionStructPtr output = 249 MultiVersionStructPtr output =
270 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); 250 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input));
271 EXPECT_TRUE(output); 251 EXPECT_TRUE(output);
272 EXPECT_TRUE(output->Equals(*expected_output)); 252 EXPECT_TRUE(output->Equals(*expected_output));
273 } 253 }
274 254
275 { 255 {
276 MultiVersionStructV3Ptr input(MultiVersionStructV3::New()); 256 MultiVersionStructV3Ptr input(
277 input->f_int32 = 123; 257 MultiVersionStructV3::New(123, MakeRect(5), std::string("hello")));
278 input->f_rect = MakeRect(5); 258 MultiVersionStructPtr expected_output(
279 input->f_string.emplace("hello"); 259 MultiVersionStruct::New(123, MakeRect(5), std::string("hello")));
280 MultiVersionStructPtr expected_output(MultiVersionStruct::New());
281 expected_output->f_int32 = 123;
282 expected_output->f_rect = MakeRect(5);
283 expected_output->f_string.emplace("hello");
284 260
285 MultiVersionStructPtr output = 261 MultiVersionStructPtr output =
286 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); 262 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input));
287 EXPECT_TRUE(output); 263 EXPECT_TRUE(output);
288 EXPECT_TRUE(output->Equals(*expected_output)); 264 EXPECT_TRUE(output->Equals(*expected_output));
289 } 265 }
290 266
291 { 267 {
292 MultiVersionStructV5Ptr input(MultiVersionStructV5::New()); 268 MultiVersionStructV5Ptr input(MultiVersionStructV5::New(
293 input->f_int32 = 123; 269 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8}));
294 input->f_rect = MakeRect(5); 270 MultiVersionStructPtr expected_output(MultiVersionStruct::New(
295 input->f_string.emplace("hello"); 271 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8}));
296 input->f_array.emplace(3);
297 (*input->f_array)[0] = 10;
298 (*input->f_array)[1] = 9;
299 (*input->f_array)[2] = 8;
300 MultiVersionStructPtr expected_output(MultiVersionStruct::New());
301 expected_output->f_int32 = 123;
302 expected_output->f_rect = MakeRect(5);
303 expected_output->f_string.emplace("hello");
304 expected_output->f_array.emplace(3);
305 (*expected_output->f_array)[0] = 10;
306 (*expected_output->f_array)[1] = 9;
307 (*expected_output->f_array)[2] = 8;
308 272
309 MultiVersionStructPtr output = 273 MultiVersionStructPtr output =
310 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); 274 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input));
311 EXPECT_TRUE(output); 275 EXPECT_TRUE(output);
312 EXPECT_TRUE(output->Equals(*expected_output)); 276 EXPECT_TRUE(output->Equals(*expected_output));
313 } 277 }
314 278
315 { 279 {
316 MultiVersionStructV7Ptr input(MultiVersionStructV7::New());
317 input->f_int32 = 123;
318 input->f_rect = MakeRect(5);
319 input->f_string.emplace("hello");
320 input->f_array.emplace(3);
321 (*input->f_array)[0] = 10;
322 (*input->f_array)[1] = 9;
323 (*input->f_array)[2] = 8;
324 MessagePipe pipe; 280 MessagePipe pipe;
325 input->f_message_pipe = std::move(pipe.handle0); 281 MultiVersionStructV7Ptr input(MultiVersionStructV7::New(
282 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8},
283 std::move(pipe.handle0), false));
326 284
327 MultiVersionStructPtr expected_output(MultiVersionStruct::New()); 285 MultiVersionStructPtr expected_output(MultiVersionStruct::New(
328 expected_output->f_int32 = 123; 286 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8}));
329 expected_output->f_rect = MakeRect(5);
330 expected_output->f_string.emplace("hello");
331 expected_output->f_array.emplace(3);
332 (*expected_output->f_array)[0] = 10;
333 (*expected_output->f_array)[1] = 9;
334 (*expected_output->f_array)[2] = 8;
335 // Save the raw handle value separately so that we can compare later. 287 // Save the raw handle value separately so that we can compare later.
336 MojoHandle expected_handle = input->f_message_pipe.get().value(); 288 MojoHandle expected_handle = input->f_message_pipe.get().value();
337 289
338 MultiVersionStructPtr output = 290 MultiVersionStructPtr output =
339 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input)); 291 SerializeAndDeserialize<MultiVersionStructPtr>(std::move(input));
340 EXPECT_TRUE(output); 292 EXPECT_TRUE(output);
341 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); 293 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value());
342 output->f_message_pipe.reset(); 294 output->f_message_pipe.reset();
343 EXPECT_TRUE(output->Equals(*expected_output)); 295 EXPECT_TRUE(output->Equals(*expected_output));
344 } 296 }
345 } 297 }
346 298
347 // Tests deserializing structs as an older version. 299 // Tests deserializing structs as an older version.
348 TEST_F(StructTest, Versioning_NewToOld) { 300 TEST_F(StructTest, Versioning_NewToOld) {
349 { 301 {
350 MultiVersionStructPtr input = MakeMultiVersionStruct(); 302 MultiVersionStructPtr input = MakeMultiVersionStruct();
351 MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New()); 303 MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New(
352 expected_output->f_int32 = 123; 304 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8}));
353 expected_output->f_rect = MakeRect(5);
354 expected_output->f_string.emplace("hello");
355 expected_output->f_array.emplace(3);
356 (*expected_output->f_array)[0] = 10;
357 (*expected_output->f_array)[1] = 9;
358 (*expected_output->f_array)[2] = 8;
359 // Save the raw handle value separately so that we can compare later. 305 // Save the raw handle value separately so that we can compare later.
360 MojoHandle expected_handle = input->f_message_pipe.get().value(); 306 MojoHandle expected_handle = input->f_message_pipe.get().value();
361 307
362 MultiVersionStructV7Ptr output = 308 MultiVersionStructV7Ptr output =
363 SerializeAndDeserialize<MultiVersionStructV7Ptr>(std::move(input)); 309 SerializeAndDeserialize<MultiVersionStructV7Ptr>(std::move(input));
364 EXPECT_TRUE(output); 310 EXPECT_TRUE(output);
365 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value()); 311 EXPECT_EQ(expected_handle, output->f_message_pipe.get().value());
366 output->f_message_pipe.reset(); 312 output->f_message_pipe.reset();
367 EXPECT_TRUE(output->Equals(*expected_output)); 313 EXPECT_TRUE(output->Equals(*expected_output));
368 } 314 }
369 315
370 { 316 {
371 MultiVersionStructPtr input = MakeMultiVersionStruct(); 317 MultiVersionStructPtr input = MakeMultiVersionStruct();
372 MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New()); 318 MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New(
373 expected_output->f_int32 = 123; 319 123, MakeRect(5), std::string("hello"), std::vector<int8_t>{10, 9, 8}));
374 expected_output->f_rect = MakeRect(5);
375 expected_output->f_string.emplace("hello");
376 expected_output->f_array.emplace(3);
377 (*expected_output->f_array)[0] = 10;
378 (*expected_output->f_array)[1] = 9;
379 (*expected_output->f_array)[2] = 8;
380 320
381 MultiVersionStructV5Ptr output = 321 MultiVersionStructV5Ptr output =
382 SerializeAndDeserialize<MultiVersionStructV5Ptr>(std::move(input)); 322 SerializeAndDeserialize<MultiVersionStructV5Ptr>(std::move(input));
383 EXPECT_TRUE(output); 323 EXPECT_TRUE(output);
384 EXPECT_TRUE(output->Equals(*expected_output)); 324 EXPECT_TRUE(output->Equals(*expected_output));
385 } 325 }
386 326
387 { 327 {
388 MultiVersionStructPtr input = MakeMultiVersionStruct(); 328 MultiVersionStructPtr input = MakeMultiVersionStruct();
389 MultiVersionStructV3Ptr expected_output(MultiVersionStructV3::New()); 329 MultiVersionStructV3Ptr expected_output(
390 expected_output->f_int32 = 123; 330 MultiVersionStructV3::New(123, MakeRect(5), std::string("hello")));
391 expected_output->f_rect = MakeRect(5);
392 expected_output->f_string.emplace("hello");
393 331
394 MultiVersionStructV3Ptr output = 332 MultiVersionStructV3Ptr output =
395 SerializeAndDeserialize<MultiVersionStructV3Ptr>(std::move(input)); 333 SerializeAndDeserialize<MultiVersionStructV3Ptr>(std::move(input));
396 EXPECT_TRUE(output); 334 EXPECT_TRUE(output);
397 EXPECT_TRUE(output->Equals(*expected_output)); 335 EXPECT_TRUE(output->Equals(*expected_output));
398 } 336 }
399 337
400 { 338 {
401 MultiVersionStructPtr input = MakeMultiVersionStruct(); 339 MultiVersionStructPtr input = MakeMultiVersionStruct();
402 MultiVersionStructV1Ptr expected_output(MultiVersionStructV1::New()); 340 MultiVersionStructV1Ptr expected_output(
403 expected_output->f_int32 = 123; 341 MultiVersionStructV1::New(123, MakeRect(5)));
404 expected_output->f_rect = MakeRect(5);
405 342
406 MultiVersionStructV1Ptr output = 343 MultiVersionStructV1Ptr output =
407 SerializeAndDeserialize<MultiVersionStructV1Ptr>(std::move(input)); 344 SerializeAndDeserialize<MultiVersionStructV1Ptr>(std::move(input));
408 EXPECT_TRUE(output); 345 EXPECT_TRUE(output);
409 EXPECT_TRUE(output->Equals(*expected_output)); 346 EXPECT_TRUE(output->Equals(*expected_output));
410 } 347 }
411 348
412 { 349 {
413 MultiVersionStructPtr input = MakeMultiVersionStruct(); 350 MultiVersionStructPtr input = MakeMultiVersionStruct();
414 MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New()); 351 MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New(123));
415 expected_output->f_int32 = 123;
416 352
417 MultiVersionStructV0Ptr output = 353 MultiVersionStructV0Ptr output =
418 SerializeAndDeserialize<MultiVersionStructV0Ptr>(std::move(input)); 354 SerializeAndDeserialize<MultiVersionStructV0Ptr>(std::move(input));
419 EXPECT_TRUE(output); 355 EXPECT_TRUE(output);
420 EXPECT_TRUE(output->Equals(*expected_output)); 356 EXPECT_TRUE(output->Equals(*expected_output));
421 } 357 }
422 } 358 }
423 359
424 // Serialization test for native struct. 360 // Serialization test for native struct.
425 TEST_F(StructTest, Serialization_NativeStruct) { 361 TEST_F(StructTest, Serialization_NativeStruct) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 RectPtr cloned_rect = rect.Clone(); 456 RectPtr cloned_rect = rect.Clone();
521 auto data = Rect::Serialize(&rect); 457 auto data = Rect::Serialize(&rect);
522 458
523 RectPtr output; 459 RectPtr output;
524 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output)); 460 ASSERT_TRUE(Rect::Deserialize(std::move(data), &output));
525 EXPECT_TRUE(output.Equals(cloned_rect)); 461 EXPECT_TRUE(output.Equals(cloned_rect));
526 } 462 }
527 463
528 { 464 {
529 // A struct containing other objects. 465 // A struct containing other objects.
530 NamedRegionPtr region(NamedRegion::New()); 466 std::vector<RectPtr> rects;
531 region->name.emplace("region"); 467 for (size_t i = 0; i < 3; ++i)
532 region->rects.emplace(3); 468 rects.push_back(MakeRect(static_cast<int32_t>(i) + 1));
533 for (size_t i = 0; i < region->rects->size(); ++i) 469 NamedRegionPtr region(
534 (*region->rects)[i] = MakeRect(static_cast<int32_t>(i) + 1); 470 NamedRegion::New(std::string("region"), std::move(rects)));
535 471
536 NamedRegionPtr cloned_region = region.Clone(); 472 NamedRegionPtr cloned_region = region.Clone();
537 auto data = NamedRegion::Serialize(&region); 473 auto data = NamedRegion::Serialize(&region);
538 474
539 // Make sure that the serialized result gets pointers encoded properly. 475 // Make sure that the serialized result gets pointers encoded properly.
540 auto cloned_data = data; 476 auto cloned_data = data;
541 NamedRegionPtr output; 477 NamedRegionPtr output;
542 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output)); 478 ASSERT_TRUE(NamedRegion::Deserialize(std::move(cloned_data), &output));
543 EXPECT_TRUE(output.Equals(cloned_region)); 479 EXPECT_TRUE(output.Equals(cloned_region));
544 } 480 }
545 481
546 { 482 {
547 // Deserialization failure. 483 // Deserialization failure.
548 RectPtr rect = MakeRect(); 484 RectPtr rect = MakeRect();
549 auto data = Rect::Serialize(&rect); 485 auto data = Rect::Serialize(&rect);
550 486
551 NamedRegionPtr output; 487 NamedRegionPtr output;
552 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output)); 488 EXPECT_FALSE(NamedRegion::Deserialize(std::move(data), &output));
553 } 489 }
554 } 490 }
555 491
492 TEST_F(StructTest, VersionedStructConstructor) {
493 auto reordered = ReorderedStruct::New(123, 456, 789);
494 EXPECT_EQ(123, reordered->a);
495 EXPECT_EQ(456, reordered->b);
496 EXPECT_EQ(789, reordered->c);
497
498 reordered = ReorderedStruct::New(123, 456);
499 EXPECT_EQ(123, reordered->a);
500 EXPECT_EQ(6, reordered->b);
501 EXPECT_EQ(456, reordered->c);
502
503 reordered = ReorderedStruct::New(123);
504 EXPECT_EQ(3, reordered->a);
505 EXPECT_EQ(6, reordered->b);
506 EXPECT_EQ(123, reordered->c);
507
508 reordered = ReorderedStruct::New();
509 EXPECT_EQ(3, reordered->a);
510 EXPECT_EQ(6, reordered->b);
511 EXPECT_EQ(1, reordered->c);
512 }
513
556 } // namespace test 514 } // namespace test
557 } // namespace mojo 515 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698